selenium testng maven项目的可执行jar,没有主类

时间:2014-09-12 08:40:56

标签: java maven selenium

我有一个用maven创建的Selenium TestNG项目。 ``

  • 此项目没有主要课程
  • 使用TestNg.xml文件,并在pom.xml文件中配置相同的文件。
  • 来自eclispe的Ran'maven test',测试基于testng.xml中定义的类成功运行。这里没问题
  • 使用项目文件夹中的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测试没有运行。它只是运行主类:( .. 我该怎么办?

2 个答案:

答案 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

  • 这在目标文件夹中创建了jar。
  • 将jar复制到Project文件夹并运行命令java -jar myproj-0.0.1-SNAPSHOT.jar,我的测试开始运行完美!!。

答案 1 :(得分:0)

我做了与JUnit类似的事情。我以编程方式从main方法运行我的测试。我不知道TestNG,但您可以在这里查看如何执行此操作 - Running TestNG programmatically