我正在尝试创建一个可以放在非开发机器上的JAR,并运行一些运行Web服务的单元测试。我已经读过在maven中有很多方法可以做到这一点。我专注于使用测试jar目标,因为这似乎是最合乎逻辑的方法。
我的测试是在一个单独的maven项目中,文件夹结构为:
/myProject/src/test/java/org/testplatform/services/test/<name of testng test>.java
这是我在pom中测试jar的配置:
<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)
有人可以帮助我理解我需要在我的pom和/或测试中做出哪些更改来创建一个独立的,可执行的JAR来运行testng单元测试吗?一个演示项目会有所帮助。
答案 0 :(得分: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的传递依赖性。您还需要将依赖项移出测试范围。