Java 没有主类的selenium testng maven项目的可执行jar
我有一个用maven创建的Selenium TestNG项目``Java 没有主类的selenium testng maven项目的可执行jar,java,maven,selenium,Java,Maven,Selenium,我有一个用maven创建的Selenium TestNG项目`` 此项目没有主类 使用TestNg.xml文件,并在pom.xml文件中配置 从eclispe运行“maven测试”,测试基于testng.xml中定义的类成功运行。这里没有问题 使用项目文件夹中的mvn test从命令提示符尝试了相同的操作,并成功运行。这里也没有问题 我的要求:现在我想将这个项目打包到可执行jar中,或者是否有任何选项可以生成一个可执行文件,这样我就可以使用批处理文件安排运行 为此,我运行了“mvnpacka
- 此项目没有主类
- 使用TestNg.xml文件,并在pom.xml文件中配置
- 从eclispe运行“maven测试”,测试基于testng.xml中定义的类成功运行。这里没有问题
- 使用项目文件夹中的
从命令提示符尝试了相同的操作,并成功运行。这里也没有问题李>mvn test
java-jar myproj-0.0.1-SNAPSHOT.jar运行它时,我得到的消息是“没有主清单属性,在myproj-0.0.1-SNAPSHOT.jar中”。这是预期的行为,因为在我的案例中没有主类。
因此,我创建了一个只包含一行打印“文本”的main类,并在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>
org.apache.maven.plugins
maven jar插件
2.3.2
mainPackage.MainOne
然后我运行mvn包,它生成了新的jar。
然后转到我的项目的目标文件夹并以java-jar myProj.jar mainPackage.MainOne
的形式运行命令,它运行并只打印“text”。我的TestNG测试没有运行。它只是运行主类:(。。
我应该怎么做?我对JUnit做了类似的事情。我从main方法以编程方式运行测试。我不知道TestNG,但您可以在这里查看如何执行-只是想让您知道,我已经找到了本文提供的解决方案
正如我提到的,我确实使用了main类,所以我做了下面的
-在pom.xml中添加了maven调用程序依赖项
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-invoker</artifactId>
<version>2.1.1</version>
</dependency>
然后从命令提示符运行命令mvn clean package shade:shade
这在目标文件夹中创建了jar
将jar复制到项目文件夹并运行命令java-jar myproj-0.0.1-SNAPSHOT.jar
,我的测试开始完美运行
我已经按照您上面的所有说明进行了操作,但我一直得到:$java-jar myproj-0.0.1-SNAPSHOT.jar没有主清单属性,在myproj-0.0.1-SNAPSHOT.jar中
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();
}
}
}