2015-05-23 16 views
3

我的java應用程序需要通過System.getProperty("java.class.path")訪問類路徑。當我從IDE運行應用程序時,這是完美的。但是,如果我通過mvn exec:java與maven運行應用程序,我發現返回的類路徑總是/usr/share/maven/boot/plexus-classworlds-2.x.jar使用mvn exec運行java應用程序時獲取真實的類路徑:java

問題是我怎樣才能得到我真正的類路徑,當應用程序由mvn exec:java開始?

更新:我最終調用URLClassLoader.getURLs()得到classpath中

+0

你不能,因爲'EXEC:java'旨在從內部運行Maven的。 'exec:exec'會做你想做的事,但我不會把它當作答案來寫,因爲閱讀'java.class.path'是一個壞主意(正如你所看到的,它取決於你是怎樣的調用)。你試圖解決的*真實*問題是什麼? – kdgregory

回答

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); 
} 

的包裝,結果得到的傳遞到編譯器爲compiler.run(null, null, null, arg1, arg2, "-cp", getClassPath())