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

使用mvn exec:java运行java应用程序时获取真实的类路径,java,maven,classpath,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()来获取类路径更

我的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()
来获取类路径

更新中的提示对我有效。这是我的
kilim.tools.Javac
分支的实现,即
ToolProvider.getSystemJavaCompiler()


get的结果作为
compiler.run(null,null,null,arg1,arg2,“-cp”,getClassPath())传递给编译器。

您不能,因为
exec:java
旨在从Maven内部运行
exec:exec
将执行您想要的操作,但我并不是将其作为答案来写的,因为阅读
java.class.path
是个坏主意(正如您所看到的,这取决于调用方式的不同)。你想解决的真正问题是什么?
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);
}