Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当测试包含JUnit@Test注释且没有主类时,如何创建Maven Jar文件_Maven_Junit_Maven 3_Maven Jar Plugin - Fatal编程技术网

当测试包含JUnit@Test注释且没有主类时,如何创建Maven Jar文件

当测试包含JUnit@Test注释且没有主类时,如何创建Maven Jar文件,maven,junit,maven-3,maven-jar-plugin,Maven,Junit,Maven 3,Maven Jar Plugin,我在一个包中存储了3个测试,它们都利用了JUnit@Test注释。我在这个项目中没有主课。当然,我可以运行As>Maven测试,所有3个测试都将被执行 我使用Install命令创建了一个Jar可执行文件,但是当我尝试运行Jar文件时,我得到了一条消息——“No main manifest attribute”消息 在Maven中处理这个问题的解决方案是什么 我知道在Gradle中,运行Jar可执行文件不需要主类 或者,我是否需要创建一个包含如下主方法的主类: public static void

我在一个包中存储了3个测试,它们都利用了JUnit@Test注释。我在这个项目中没有主课。当然,我可以运行As>Maven测试,所有3个测试都将被执行

我使用Install命令创建了一个Jar可执行文件,但是当我尝试运行Jar文件时,我得到了一条消息——“No main manifest attribute”消息

在Maven中处理这个问题的解决方案是什么

我知道在Gradle中,运行Jar可执行文件不需要主类

或者,我是否需要创建一个包含如下主方法的主类:

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());
}
}
然而,我觉得这有点违反直觉。

生成测试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>
您需要在
-cp
参数中添加所有必需的依赖项

测试套件 每个测试都必须一个接一个地执行,但您可以,因此您可以使用单个命令轻松执行所有测试:

@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

我不明白你想如何在没有主类的情况下运行一个JAR?我有3个单独的测试,都包含@Test注释,但也许我确实需要一个主类,如果需要,我该如何创建它?但是你打算如何运行它,至少在概念上是这样?你到底想实现什么?我希望它执行测试,就像我运行测试命令一样。你想把测试打包到jar文件中吗?看看这个问题:优秀的亚历克斯,我会尝试一下,然后再给你回复!顺便说一句,这假设您的测试在maven的测试文件夹中:
src/test/java
(不在
src/main/java
)啊,是的,我试图使用它进行编译,但得到一些编译错误,表明我的名为test的包不存在。我会尽力解决的。我还需要一个TestRunner类吗?Alex,我想这实际上是假设我的测试是在src/main/java而不是src/test/java中进行的?我的测试存储在src/test/java中一个名为test的包中,如何引用SuiteAbcTest类中的测试?SuiteAbcTest也必须位于
src/test/java
中。测试文件夹中与测试相关的所有内容。然后,
maven-jar-plugin
将生成一个包含测试类的jar,然后您就可以使用TestRunner运行它了。
java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \ 
     junit.textui.TestRunner com.xyz.SuiteAbcTest