2011-11-29 96 views
0

我試圖創建一個JAR,我可以將其放在非開發計算機上並運行一些運行Web服務的單元測試。我讀過,有很多方法可以在maven中做到這一點。我專注於使用測試jar目標,因爲這似乎是最合乎邏輯的方法。在Maven中創建可執行測試jar時出錯

我的測試是在一個文件夾結構中的獨立Maven項目:

/myProject/src/test/java/org/testplatform/services/test/<name of testng test>.java 

這裏是我的配置被測試罐子在POM:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <executions> 
       <execution> 
       <goals> 
        <goal>test-jar</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>org/testplatform/services/test/MainTestClass.java</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 

當我執行結果JAR我得到這個錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: org/testng/ITestListener 
Caused by: java.lang.ClassNotFoundException: org.testng.ITestListener 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

有人可以幫助我瞭解我需要做什麼改變在我的朋友和/或測試創建一個獨立的,可執行的JAR運行testng單元測試?演示項目會很有幫助。

回答

1

錯誤提示您正在使用TestNG類,並且這些類在結果類路徑中不可用。這是可能的,因爲你test作用域的TestNG的依賴

<dependency> 
    <groupId>...</groupId> 
    <artifactId>...</artifactId> 
    <version>...</version> 
    <scope>test</scope>   <<< Test scope 
</dependency> 

這將導致從所得到的JAR這種依賴的排斥。

如果你還沒有,建議閱讀Maven's in-depth explanation建議測試JAR的建議方法和避免的陷阱。

你已經做出了將測試類提取到單獨項目的正確步驟。這確保您可以利用Maven的傳遞依賴關係。您還需要將依賴關係移出測試範圍。