我有一个用maven创建的Selenium TestNG项目。 ``
mvn test
从命令提示符尝试相同的操作,并且它成功运行。这里也没有问题。 我的要求:现在我想将这个项目打包到可执行jar或是否有任何选项来制作可执行文件,以便我可以使用批处理文件安排运行。
为此,我运行了'mvn package'命令,它在目标文件夹中生成了jar文件。现在,当我尝试以java -jar myproj-0.0.1-SNAPSHOT.jar
运行时,我将消息显示为“没有主要清单属性,在myproj-0.0.1-SNAPSHOT.jar中”。这是预期的行为,因为在我的案例中没有主要类别
所以我创建了一个只用一行打印“text”的主类,并在pom.xml中添加了mainClass下面的条目
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifest>
<mainClass>mainPackage.MainOne</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
然后我运行了mvn包,它生成了新的jar。
然后转到我的项目的目标文件夹并运行命令java -jar myProj.jar mainPackage.MainOne
,它运行并只打印“文本”。我的TestNG测试没有运行。它只是运行主类:( ..
我该怎么办?
答案 0 :(得分:1)
只是为了让您知道我找到了此How to programmatically call a Maven-task
中提供的解决方案正如我所提到的,我确实使用了主类。所以我做了以下
- 在pom.xml中添加了maven-invoker依赖
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-invoker</artifactId>
<version>2.1.1</version>
</dependency>
使用此链接http://maven.apache.org/shared/maven-invoker/usage.html
更新了我的主要课程类,如下所示public class MainOne {
public static void main(String[] args) {
InvocationRequest request = new DefaultInvocationRequest();
request.setPomFile( new File( "pom.xml" ));
request.setGoals( Collections.singletonList( "install" ));
Invoker invoker = new DefaultInvoker();
invoker.setMavenHome(new File(System.getenv("MAVEN_HOME")));
try {
invoker.execute( request );
} catch (MavenInvocationException e) {
e.printStackTrace();
}
}
}
然后从命令提示符运行命令mvn clean package shade:shade
java -jar myproj-0.0.1-SNAPSHOT.jar
,我的测试开始运行完美!!。答案 1 :(得分:0)
我做了与JUnit类似的事情。我以编程方式从main方法运行我的测试。我不知道TestNG,但您可以在这里查看如何执行此操作 - Running TestNG programmatically