1

私は狂ったように2時間スタックオーバーフローをしましたが、これまでのところ何も役に立ちませんでした。

シングルトンクラスを持つ非常に基本的なMavenプロジェクトがあります。異なるクラスローダーでシングルトンを2回ロードできると言われているので、独自に作成しましたが、ClassNotFoundExceptionを取得しているため、そのクラスをロードできないという問題がありますが、その理由はわかりません。

@RunWith(JUnit4.class)
public class SingletonClassLoadedDifferentClassLoadersTestCase {

    static class SingletonClassLoader extends ClassLoader {

        @Override
        public Class<?> loadClass(String className)
          throws ClassNotFoundException {
            try {
                InputStream is =
                    // seems to be the central problem 
                    ClassLoader.getSystemResourceAsStream(className);
                if (is == null) {
                    throw new ClassNotFoundException();
                }

                ByteArrayOutputStream buffer = new ByteArrayOutputStream();

                int nRead;
                byte[] data = new byte[1024];

                while ((nRead = is.read(data, 0, data.length)) != -1) {
                    buffer.write(data, 0, nRead);
                }

                byte[] classBytes = buffer.toByteArray();

                return defineClass(className, classBytes, 0, classBytes.length);
            } catch (IOException ex) {
                throw new ClassNotFoundException();
            }
        }
    }

    @Test
    public void singletonTest() throws Exception {
        Class<?> singleton1 = new SingletonClassLoader()
            .loadClass("SingletonLazy");
        Class<?> singleton2 = new SingletonClassLoader()
            .loadClass("SingletonLazy");
    }
}

SingletonLazysrc/main/java の単なるクラスです (一部のパッケージ ディレクトリに埋め込まれています)。ClassLoader がそのクラスを見つけられないようですが、なぜですか? には入っていないことがわかりますtarget/test-classes。テストを実行しているときに、クラスパスの src/main/java/some/package/SingletonLazy.java に何らかの方法でそのクラスを配置するように Maven に指示するにはどうすればよいですか? のようにコマンドラインから実行していますmvn clean test

ヒントをありがとう!

4

1 に答える 1