我像疯了一样做了两个小时的stackoverflow,但到目前为止没有任何帮助。
我有一个非常基本的 Maven 项目,其中有一些 Singleton 类。据说可以使用不同的类加载器加载单例两次,所以我编写了自己的,但问题是我无法加载该类,因为我得到 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
在我进行测试时,如何告诉 Maven 以某种方式将该类放在类路径上的 src/main/java/some/package/SingletonLazy.java 中?我正在从命令行执行它mvn clean test
谢谢你的任何提示!