当测试包含 JUnit @Test 注释且没有 main class 时如何创建 Maven Jar 文件
How to create Maven Jar file when tests contain JUnit @Test annotations and no main class
我在一个包下存储了 3 个测试,它们都利用了 JUnit @Test 注释。我在项目中没有 main class。当然,我可以去 运行 As > Maven Test 并且所有 3 个测试都将被执行。
我使用 Install 命令创建了一个 Jar 可执行文件,但是当我尝试 运行 Jar 文件时,我收到消息 - "No main manifest attribute" 消息。
在 Maven 中处理这个问题的解决方案是什么?
我知道在 Gradle 中,您不需要 main class 到 运行 Jar 可执行文件。
或者,我是否需要创建一个 main class 包含这样一个 main 方法:
public static void main(String[] args){
List tests = new ArrayList();
tests.add(TestOne.class);
tests.add(TestTwo.class);
for (Class test : tests){
runTests(test);
}
}
private static void runTests(Class test){
Result result = JUnitCore.runClasses(test);
for (Failure failure : result.getFailures()){
System.out.println(failure.toString());
}
}
然而,这种感觉对我来说是违反直觉的。
生成test-jar
您可以将其添加到您的 pom.xml 中以生成包含所有测试的 jar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
执行测试class
然后,以这种方式执行测试:
java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \
junit.textui.TestRunner com.xyz.SomeTest
您需要在 -cp
参数中添加所有需要的依赖项。
测试套件
每个测试都必须一个接一个地执行,但您可以create a testSuite,因此您可以使用一个命令轻松执行所有测试:
@RunWith(Suite.class)
@Suite.SuiteClasses({
SomeTest.class,
SomeOtherTest.class
})
public class SuiteAbcTest {
//normally, this is an empty class
}
并执行测试套件:
java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \
junit.textui.TestRunner com.xyz.SuiteAbcTest
我在一个包下存储了 3 个测试,它们都利用了 JUnit @Test 注释。我在项目中没有 main class。当然,我可以去 运行 As > Maven Test 并且所有 3 个测试都将被执行。
我使用 Install 命令创建了一个 Jar 可执行文件,但是当我尝试 运行 Jar 文件时,我收到消息 - "No main manifest attribute" 消息。
在 Maven 中处理这个问题的解决方案是什么?
我知道在 Gradle 中,您不需要 main class 到 运行 Jar 可执行文件。
或者,我是否需要创建一个 main class 包含这样一个 main 方法:
public static void main(String[] args){
List tests = new ArrayList();
tests.add(TestOne.class);
tests.add(TestTwo.class);
for (Class test : tests){
runTests(test);
}
}
private static void runTests(Class test){
Result result = JUnitCore.runClasses(test);
for (Failure failure : result.getFailures()){
System.out.println(failure.toString());
}
}
然而,这种感觉对我来说是违反直觉的。
生成test-jar
您可以将其添加到您的 pom.xml 中以生成包含所有测试的 jar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
执行测试class
然后,以这种方式执行测试:
java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \
junit.textui.TestRunner com.xyz.SomeTest
您需要在 -cp
参数中添加所有需要的依赖项。
测试套件
每个测试都必须一个接一个地执行,但您可以create a testSuite,因此您可以使用一个命令轻松执行所有测试:
@RunWith(Suite.class)
@Suite.SuiteClasses({
SomeTest.class,
SomeOtherTest.class
})
public class SuiteAbcTest {
//normally, this is an empty class
}
并执行测试套件:
java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \
junit.textui.TestRunner com.xyz.SuiteAbcTest