2014-05-03 78 views
0

我有一個是作爲一個jar文件創建和使用運行Java控制檯基於應用:如何獲得兄弟項目的jar工件的路徑?

java -jar commandlineapp.jar 

該應用程序是使用Maven構建。我有一個JUnit測試項目,這也是一個Maven項目,即

parent 
+- pom.xml 
+- commandlineapp 
| +-pom.xml 
+- commandlineapp_test 
    +pom.xml 

測試項目對commandlineapp的依賴,以確保應用程序之前運行測試構建。

測試項目有一些junit單元測試,使用ProcessBuilder執行commmandlineapp。例如。

String jarfile = 
"C:\\Users\\me\\.m2\\repository\\my\\org\\commandlineapp\\0.0.1-SNAPSHOT\\commandlineapp-.0.1-SNAPSHOT.jar"; 

ProcessBuilder pb = new ProcessBuilder("java", "-jar", jarFile); 

此刻,你可以看到我有一個硬編碼的路徑到commandlineapp jar文件。

問題:有一些元數據,我可以用它來查找兄弟項目的jar路徑嗎?理想情況下,我仍然希望能夠從eclipse運行單元測試,除了從maven運行它們。

+0

任何特別的原因JUnit測試案例活在自己的模塊? –

+1

我認爲這些測試可能會被移到相同的模塊中。 –

+0

@Duncan,感謝您的靈感。我現在將相對文件夾''target \ classes''作爲ProcessBuilder的''-cp'''參數並直接執行該類,而不是使用''-jar'''選項。 –

回答

0

一種方法是使用maven依賴插件的測試項目到commandlineapp(及其附屬)複製到測試項目:從測試項目中

 <plugin> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>process-test-resources</phase> 
       <goals> 
       <goal>unpack-dependencies</goal> 
       </goals> 
       <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

然後,您可以訪問目標文件夾:

File testClassesFolder = 
    new File(CommandLineAppTest.class.getClassLoader().getResource(".").getFile()); 

我們需要用類路徑創建一個字符串。類路徑

String classPath = testClassesFolder.getParent() + File.separator + "lib"; 

那麼這個傳遞給的ProcessBuilder:

ProcessBuilder pb = 
    new ProcessBuilder(
    javaExecutablePath, "-cp", classPath, "my.org.CommandLineApp" 
); 
相關問題