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