使用mvn exec:java运行java应用程序时获取真正的类路径

时间:2015-05-23 12:20:17

标签: java maven classpath

我的java应用程序需要通过System.getProperty("java.class.path")访问类路径。当我从IDE运行应用程序时,这非常有效。但是,如果我通过mvn exec:java使用maven运行应用程序,我发现返回的类路径始终是/usr/share/maven/boot/plexus-classworlds-2.x.jar

问题是如何在mvn exec:java启动应用程序时获取真正的类路径?

更新:我最终调用URLClassLoader.getURLs()来获取类路径

1 个答案:

答案 0 :(得分:1)

您的更新中的提示对我有用。这是我的kilim.tools.Javac分叉的实现,即ToolProvider.getSystemJavaCompiler()的包装

static String getClassPath() {
    String cp = "";
    ClassLoader sys = ClassLoader.getSystemClassLoader();
    ClassLoader cl = Javac.class.getClassLoader();
    for (; cl != null & cl != sys; cl = cl.getParent())
        if (cl instanceof java.net.URLClassLoader) {
            java.net.URLClassLoader ucl = (java.net.URLClassLoader) cl;
            for (java.net.URL url : ucl.getURLs())
                cp += File.pathSeparator + url.getPath();
        }
    return cp.length()==0 ? null : cp.substring(1);
}

结果get以compiler.run(null, null, null, arg1, arg2, "-cp", getClassPath())

的形式传递给编译器