我在将我的 maven selenium 项目打包到一个独立的 jar 文件中时遇到了问题尽管在 jar 文件中,但测试类没有 cp

问题描述

我尝试将我的 maven selenium autotest 项目打包到一个独立的 jar 中。我使用下一个主类来开始测试类:

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();
    }
}

我对此没有任何问题,测试从主类完美运行。下一步是将项目打包成 jar 文件。所以我为此使用了 maven-jar-plugin 和 maven-assembly-plugin:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>common.MainClass</mainClass>
                        </manifest>
                    </archive>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>src/test/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M5</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
        </plugins>
    </build>

和我的程序集:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>test-jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <!-- we're creating the test-jar as an attachement -->
            <useProjectAttachments>true</useProjectAttachments>
            <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>

我设法将通用类和测试类都打包在一个 jar 文件中。我手动把pom文件和testing文件和jar文件放在同一个目录下,这样启动项目就没有问题了。但是测试没有运行,因为没有找到测试类,尽管在项目中。

如果有人告诉我我做错了什么,我将不胜感激。

附言我在这里引用了我的项目:https://bitbucket.org/Max1203/donatiton-script.git

解决方法

未找到测试类可能是配置错误 你能重新导入 maven 依赖,它会解决吗

Maven 循环-重新加载所有 Maven 项目

,

万一有人需要答案。只需将 MainClass 中的代码更改为下一个即可:

TestNG testNG = new TestNG();
        testNG.setTestSuites(Arrays.asList("testng.xml"));
        testNG.setPreserveOrder(true);
        testNG.run();

它会解决问题。