【问题标题】:executable jar for selenium testng maven project which dont have a main class没有主类的 selenium testng maven 项目的可执行 jar
【发布时间】:2014-11-06 09:15:28
【问题描述】:

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

  • 这个项目没有主类
  • 使用TestNg.xml文件,在pom.xml文件中配置相同。
  • 从 eclispe 运行“maven 测试”,测试根据 testng.xml 中定义的类成功运行。这里没有问题
  • 在命令提示符下使用项目文件夹中的mvn test 尝试了相同的操作,并成功运行。这里也没有问题。

我的要求:现在我想将此项目打包到可执行 jar 中,或者是否有任何选项可以制作可执行文件,以便我可以使用批处理文件安排运行。

为此,我运行了“mvn package”命令,它在目标文件夹中生成了 jar 文件。现在,当我尝试以java -jar myproj-0.0.1-SNAPSHOT.jar 运行它时,我收到消息为“在 myproj-0.0.1-SNAPSHOT.jar 中没有主清单属性”。这是预期的行为,因为在我的情况下没有主类。
所以我创建了一个主类,只有一行来打印“文本”,并在 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 package 并生成了新的 jar。 然后转到我项目的目标文件夹并以java -jar myProj.jar mainPackage.MainOne 运行命令,它运行并打印了“文本”。我的 TestNG 测试没有运行。它刚刚跑了主课:(.. 我该怎么办?

【问题讨论】:

    标签: java maven selenium


    【解决方案1】:

    我用 JUnit 做了类似的事情。我从 main 方法以编程方式运行我的测试。我不知道 TestNG 但你可以在这里看看如何做到这一点 - Running TestNG programmatically

    【讨论】:

      【解决方案2】:

      只是为了让您知道我找到了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复制到项目文件夹并运行命令java -jar myproj-0.0.1-SNAPSHOT.jar,我的测试开始完美运行!!。

      【讨论】:

      • 我已按照您上面的所有说明进行操作,但我不断收到:$ java -jar myproj-0.0.1-SNAPSHOT.jar no main manifest attribute, in myproj-0.0.1-SNAPSHOT.jar
      猜你喜欢
      • 2017-10-11
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2020-12-27
      • 2014-04-07
      • 2021-05-25
      相关资源
      最近更新 更多