当前位置: 首页 > 知识库问答 >
问题:

如何运行生成后生成的maven项目的jar文件?

潘璞瑜
2023-03-14

我做了一个简单的项目,其中包含一些测试,我希望能够在其他计算机上启动测试。我使用runas构建了这个项目-

错误:在com类中找不到Main方法。实例TestPurchase,请将main方法定义为:publicstaticvoidmain(String[]args)或JavaFX应用程序类必须扩展JavaFX。应用应用

据我所知,TestNG不需要任何主方法,因为有注释。这就引出了一些问题:

  1. 我构建项目的方式有问题吗
  2. 我是否正确理解通过jar文件执行测试的方法
  3. 我甚至必须使用那个jar文件吗?因为我可以使用mvn test

这是我的pom。xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>Sightsy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
    <java.version>1.8</java.version>
    <selenium.version>3.12.0</selenium.version>
    <testng.version>6.13.1</testng.version>
    <javafaker.version>0.14</javafaker.version>
    <guava.version>23.2-jre</guava.version>
    <extentreports.version>3.0.7</extentreports.version>
    <extenttestng.version>1.3.1</extenttestng.version>
    <assertj.version>3.8.0</assertj.version>
    <maven.compiler.version>3.7.0</maven.compiler.version>
    <commons.version>3.7</commons.version>
    <commons.io.version>2.6</commons.io.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>${selenium.version}</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
    </dependency>
    <dependency>
        <groupId>com.github.javafaker</groupId>
        <artifactId>javafaker</artifactId>
        <version>${javafaker.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
    </dependency>
    <dependency>
        <groupId>com.aventstack</groupId>
        <artifactId>extentreports</artifactId>
        <version>${extentreports.version}</version>
    </dependency>
    <dependency>
        <groupId>com.vimalselvam</groupId>
        <artifactId>testng-extentsreport</artifactId>
        <version>${extenttestng.version}</version>
    </dependency>
    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${assertj.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons.version}</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons.io.version}</version>
    </dependency>
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>3.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-core</artifactId>
        <version>1.2.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.example.TestPurchase</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21.0</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>src/main/resources/suites/testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
</plugins>
</build>

共有2个答案

孙修贤
2023-03-14

首先,您必须有一个带有“main”方法的单独类,您将在其中指定xml套件文件。

package com.example;
import java.util.ArrayList;
import java.util.List;
import org.testng.TestNG;
public class MainClass {
public static void main(String[] args) {
TestNG testSuite = new TestNG();
List<String> suites = new ArrayList<String>();
suites.add("path_to_your_xml_suite_file_in_target_folder");
testSuite.setTestSuites(suites);
testSuite.run();
 }
}

然后,你将需要指定这个类与"main"方法配置的maven-shave-plugin在pom.xml

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.example.TestNGMainClass</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>

然后,当您将执行mvn构建包而不执行测试时,您将在目标文件夹中拥有一个完全工作的可执行jar文件,您可以使用java-jarname_of_you_jar_file.jar在命令行中启动该文件。它需要驱动程序和xml套件文件才能工作

柳飞鸾
2023-03-14

我不熟悉TestNG框架,但我的理解如下:

当执行“mvn包”时,您的项目将被“验证”、“编译”,然后“打包”。在编译过程中,您的代码被更改为字节码,并且可以由java虚拟机(JVM)解释(执行)。这个编译的代码只有你的应用程序(我假设,这是一个在服务器上执行Java应用程序)。

在打包步骤中,这些编译的类(没有测试)被放在jar文件中。这个jar文件应该只包含你的应用程序(同样,没有测试)-这是你想要的,因为你的jar文件更小,只包含真正需要的东西。

现在,当执行“mvn test”时,带有测试代码的类会被编译,然后执行。TestNG“自动”添加主要功能,以便JVM知道该做什么。请注意,再次运行“mvn包”仍然不会在jar文件中包含这些测试。

直接回答你的问题:广告1。没有广告2。是的,“mvn测试”是正确的方法。公元3年。不,您不应该在测试期间使用jar文件。它将在以后的部署过程中使用。

 类似资料:
  • 问题内容: 我正在尝试使一个Maven托管项目在命令行上运行。 我在pom.xml中有一组依赖关系,这些依赖关系随后被下载并安装在〜/ .m2 / repository /中。我在pom中包含了必要的配置,以将类路径添加到jar清单中。 现在的问题是我试图这样运行jar:java -jar project-SNAPSHOT.jar。 Java找不到下载的依赖项(我想是因为列出的依赖项在清单中没有路

  • 我正在为Eclipse使用m2e Maven插件。我有5个eclipse项目。一个web应用程序项目,然后4个项目作为我的web应用程序的jars依赖项。

  • 问题内容: 当我尝试使用生成Eclipse项目文件时,出现以下错误: 插件管理器中执行目标’org.apache.maven.plugins:maven-eclipse- plugin:2.9-SNAPSHOT:eclipse’的内部错误:无法加载mojo’org.apache.maven.plugins:maven- eclipse-plugin:插件``org .apache.maven.pl

  • 我已经从spring入门指南下载了源代码(zip文件):http://spring.io/guides/gs/rest-service/ 在文件夹“Complete”中生成整个项目已成功。使用Gradle(Gradle run)运行生成的jar文件也是成功的。但当我尝试在Windows命令行中使用“java-jar build\libs\gs-rest-service-0.1.0.jar”手动运行

  • 我制作了一个小程序,只有一个类,我一直在尝试将它制作成一个小程序。jar文件。在Eclipse中,我右键单击文件夹- **注意:另外,如果我尝试在命令提示符中使用“javac”进行编译,它会说“javac不被识别为内部或外部命令、可操作程序或批处理文件”。

  • 问题内容: 由于传递依赖关系,我的战争被xml-apis和xerces jar填充。我尝试按照参考页上有关maven-war- plugin的说明进行操作,但是它不起作用。 我究竟做错了什么 ?如果很重要,我发现我正在使用的maven-war-plugin版本为2.1-alpha-1 问题答案: 您可以将这些依赖项标记为已提供: 这样,maven会将它们添加到编译类路径中,但不会打包它们。假定它们