类路径上的类文件的ClassNotFoundException

roe*_*erj 3 java classpath

我有以下代码:

    // Test TODO remove
    try {
        System.out.println(System.getProperties().getProperty("java.class.path"));
        this.getClass().getClassLoader().loadClass("mypackage.MyClass");
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

现在输出显示出该类位于类路径上,即:

/...some/path.../workspace/project/target/test-classes:/rest/of/the/classpath
java.lang.ClassNotFoundException: mypackage.MyClass
        ...here be stacktrace...
Run Code Online (Sandbox Code Playgroud)

我还确保类文件确实位于给定位置,即该文件存在:

/...some/path.../workspace/project/target/test-classes/mypackage/MyClass.class
Run Code Online (Sandbox Code Playgroud)

也许以下几点很重要:所示代码是在附加到jUnit测试的javaagent中执行的,我通过编程方式启动了该代码(通过Runtime.execute(...))-因此,很明显,除了背景...但仍然:如果类路径包含带有类的文件夹,那么为什么它不能被加载?

Tom*_*ine 5

Java代理在启动JVM的早期就被加载(出于明显的原因),并且具有自己的“类路径”,因此(历史名称)系统类加载器实际上并未加载它。这就是为什么在命令行参数中包含“ jarpath”的原因。

因此,您需要使用System.getSystemClassLoaderURLClassLoader.newInstance(带有java.class.path)或Thread.getContextClassLoader根据您的情况而定。