Java 来自LeanFT项目的包JAR

Java 来自LeanFT项目的包JAR,java,intellij-idea,jar,testng,leanft,Java,Intellij Idea,Jar,Testng,Leanft,我在intellijidea中有一个LeanFTtestsuite和TestNG框架。我使用mvn install命令生成jar文件。我尝试执行时收到错误消息: 错误:无法找到或加载主类test.LeanFTest leanfest类存在于名为包的测试中,并包含以下行: public class LeanFTest { public static void main(String[] args) throws IOException, SAXException, ParserConfig

我在
intellijidea
中有一个
LeanFT
testsuite和
TestNG
框架。我使用
mvn install
命令生成jar文件。我尝试执行时收到错误消息:

错误:无法找到或加载主类test.LeanFTest

leanfest
类存在于名为包的测试中,并包含以下行:

public class LeanFTest {
    public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
        TestNG testNG = new TestNG();
        testNG.setTestSuites(Arrays.asList("testng.xml"));
        testNG.setPreserveOrder(true);
        testNG.run();
}
testng.xml
文件:

<suite name="MyTestSuite" verbose="2" parallel="methods" thread-count="1">

    <listeners>
        <listener class-name="utils.TestNGListener"></listener>
    </listeners>

    <test name="Regression" parallel="false" >
        <classes>
            <class name="test.RegressionTest" />
        </classes>
    </test>

</suite>
<?xml version="1.0"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">

    <id>fat-tests</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>test</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/test-classes</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.class</include>
            </includes>
            <useDefaultExcludes>true</useDefaultExcludes>
        </fileSet>
    </fileSets>
</assembly>
leanft assembly.xml
文件:

<suite name="MyTestSuite" verbose="2" parallel="methods" thread-count="1">

    <listeners>
        <listener class-name="utils.TestNGListener"></listener>
    </listeners>

    <test name="Regression" parallel="false" >
        <classes>
            <class name="test.RegressionTest" />
        </classes>
    </test>

</suite>
<?xml version="1.0"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">

    <id>fat-tests</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>true</unpack>
            <scope>test</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/test-classes</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.class</include>
            </includes>
            <useDefaultExcludes>true</useDefaultExcludes>
        </fileSet>
    </fileSets>
</assembly>


leanfest类
必须包含
注释
非Java主方法。TestNG不会调用java主方法。因此,无论您想要调用哪个类(RegressionTest),都要确保它具有要调用的
@Test
注释


您可以通过使用
TestNG
Run执行脚本来检查脚本,而无需从.XML文件执行

leanfest类
必须包含
@Test
注释
非Java主方法。TestNG不会调用java主方法。因此,无论您想要调用哪个类(RegressionTest),都要确保它具有要调用的
@Test
注释


您可以通过使用
TestNG
Run执行脚本来检查脚本,而无需从.XML文件执行

默认情况下,在构建jar时,驻留在
src/test/java
下的类永远不会包含在jar中

因此,当您尝试通过jar调用TestNG时,TestNG显然无法找到它

请参阅以了解如何构建包含测试类的jar

当您使用IDE时,TestNG可以看到
src/main/java
src/test/java
下的所有类,这就解释了为什么IDE中可以工作

更新:我已经更新了答案,引用了解决此问题的正确堆栈溢出答案

我正在复制相关章节供您参考

pom文件中相应的
maven jar插件
maven汇编插件
说明


org.apache.maven.plugins
maven jar插件
试验罐
org.apache.maven.plugins
maven汇编插件
3.1.0
组装
包裹
单一的
org.testng.testng
假的
src/test/resources/assembly.xml
文件内容
src/test/resources/assembly.xml


带有依赖项的测试jar
罐子
假的
/
真的
真的
真的
测试
现在,当您运行
mvncleanpackage
时,您应该能够在创建的jar中找到您的测试类了。 在这里,我们主要做两件事:

  • 使用
    maven jar插件
    我们首先创建一个包含测试文件的jar(您应该在
    target/*-tests.jar下看到jar
  • 使用
    maven汇编插件
    我们现在正在创建一个uber-jar,它包括
    测试jar
    ,也作为附件,但在解包后包括它

  • 默认情况下,在构建jar时,驻留在
    src/test/java
    下的类永远不会包含在jar中

    因此,当您尝试通过jar调用TestNG时,TestNG显然无法找到它

    请参阅以了解如何构建包含测试类的jar

    当您使用IDE时,TestNG可以看到
    src/main/java
    src/test/java
    下的所有类,这就解释了为什么IDE中可以工作

    更新:我已经更新了答案,引用了解决此问题的正确堆栈溢出答案

    我正在复制相关章节供您参考

    pom文件中相应的
    maven jar插件
    maven汇编插件
    说明

    
    org.apache.maven.plugins
    maven jar插件
    试验罐
    org.apache.maven.plugins
    maven汇编插件
    3.1.0
    组装
    包裹
    单一的
    org.testng.testng
    假的
    src/test/resources/assembly.xml
    
    文件内容
    src/test/resources/assembly.xml

    
    带有依赖项的测试jar
    罐子
    假的
    /
    真的
    真的
    真的
    测试
    
    现在,当您运行
    mvncleanpackage
    时,您应该能够在创建的jar中找到您的测试类了。 在这里,我们主要做两件事:

  • 使用
    maven jar插件
    我们首先创建一个包含测试文件的jar(您应该在
    target/*-tests.jar下看到jar
  • 使用
    maven汇编插件
    我们现在正在创建一个uber-jar,它包括
    测试jar
    ,也作为附件,但在解包后包括它

  • 是否有任何RegressionTest类?您想要运行,@IshitaShah:是的,当然,它存在于名为包的测试中。是否有任何RegressionTest类?您想要运行,@IshitaShah:是的,当然,它存在于名为包的测试中。当我从
    IntelliJ IDEA
    执行
    leanfest
    类时,它开始执行
    Reg>ResionTest
    。所以它在IDE中正常工作。您是从textng.xml执行它的,所以testng参数在查找@Test annotation而不是java main方法。在LEanFTest类上使用Test annotation运行是否有错误?我将
    @Test
    annotation添加到
    LEanFTest
    类中,但没有任何更改,具有相同的我检查了JAR文件,发现它包含/src/main文件夹中的文件,但不包含