【问题标题】:How to make an executable jar file using IntelliJ from a Selenium/TestNG java file?如何使用 IntelliJ 从 Selenium/TestNG java 文件制作可执行 jar 文件?
【发布时间】:2014-05-04 02:39:26
【问题描述】:

我已经在谷歌上搜索了好几天,试图弄清楚如何做到这一点,如果有人在此之前这样做过,我将不胜感激。

我有一个我在 IntelliJ 中创建的自动化测试项目,它可以自动化用户与 Web 应用程序的交互。

我想将该自动化测试(用 Java 创建,使用 Selenium 和 TestNG)放入一个可执行的 jar 文件中,其他人可以通过双击该 jar 文件来运行该文件。

每次我尝试通过导航到项目结构 -> 工件 -> + -> Jar -> 从具有依赖项的模块来创建 jar 文件时,它最终都会创建一个声明它的 jar,

"Could not find or load the main class <package.MainClass> "

当我尝试使用以下命令运行它时:

java -jar MyProject.jar <Manifest Path>

知道为什么我不断收到此错误,或者有办法成功执行此操作吗?

另外,这是我的 pom.xml:

<groupId>TestAutomation</groupId>
<artifactId>TestAutomation</artifactId>
<version>1.0-SNAPSHOT</version>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.test.automation.Executable</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>2.39.0</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.40.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.1.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

【问题讨论】:

    标签: java selenium intellij-idea jar executable-jar


    【解决方案1】:

    我终于为碰巧遇到这个问题的其他人弄清楚了,这就是我创建 jar 文件并成功运行的方法......

    我必须将我的 pom.xml 文件更改为以下内容:

    <groupId>TestAutomation</groupId>
    <artifactId>TestAutomation</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <url>http://maven.apache.org</url>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.test.automation.Executable</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.40.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.1.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    

    然后,我不得不调整我的 main 方法以不使用任何与 TestNG 相关的调用。例如,我不能在我的 main 方法中使用这样的东西:

        TestListenerAdapter tla = new TestListenerAdapter();
        TestNG testng = new TestNG();
        testng.setTestClasses(new Class[] {WordProfFonts2Set0.class});
        testng.addListener(tla);
        testng.run();
    

    最后,以下是创建相应 jar 文件的步骤:

    1. 从顶部菜单中选择文件 > 项目结构...
    2. 在左侧菜单中选择“Artifact”,然后单击“+”
    3. 选择 Jar > 从具有依赖项的模块...
    4. 使用浏览按钮选择您的主类
    5. 点击“解压到目标jar”旁边的单选按钮,然后点击“确定”
    6. 点击“+”,然后选择“模块测试输出”
    7. 在右侧的“可用元素”窗格中,展开项目名称并选择所有 Maven 文件,然后将它们移动到左侧窗格中正在创建的 jar 目录中
    8. 点击“确定”
    9. 从顶部菜单中选择 Build > Build Artifacts...
    10. 将鼠标悬停在创建的 jar 上,然后单击 Actions 下的“Build”

    注意事项:

    1. 请务必将 IE 或 Chrome 驱动程序添加到您的项目资源文件夹中,并通过代码文件夹而不是计算机硬盘驱动器调用它。例如,这样做:

      文件 file = new File("src\test\resources\binaries\IEDriverServer.exe");

    不是这个:

    File file = new File
    ("C:\\Users\\<Username>\\<Proj Name>\\src\\test\\java\\src\\
      test\\resources\\binaries\\IEDriverServer.exe");
    

    然后在您的 jar 保存到您的计算机上的同一文件夹中创建包含驱动程序的相同目录:

    src
    TestAutomation.jar
    

    2 。请确保,如果使用 IE,则为所有区域设置保护模式或不设置保护模式(在 IE 中,转到 Internet 选项...> 安全(选项卡)> 启用保护模式复选框)

    【讨论】:

    • 希望这对处于相同情况的其他人有所帮助! :-)
    • 这正是我想要做的。我在这里仍然缺少一些细节。你能发布你的 Manifest.mf 吗?还有你项目的骨架?我想弄清楚的是你是把你的测试移到主要来源还是让它们处于测试状态?您的 public static void main(String[] args).. 是什么样的?谢谢!
    • 谢谢urbanaut,我也在寻找类似的解决方案,我是新手,不知道应该在我的主要方法中放什么,在我使用你在我的主要方法中提到的相同代码之前,但是当我创建了无法运行的可执行 jar 抱怨“找不到或加载主类”不知道如何解决。从您的步骤来看,我有几个问题 1. 我应该在 main 方法中放入什么来运行我的测试? 2.在你的第6步和第7步中,我不清楚你能详细说明吗?如果可以的话,截图会很好。 3. 如何运行这个 jar 以便它调用我的 testng 测试?请提供您的宝贵意见。谢谢
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 2013-06-13
    • 2014-09-20
    • 1970-01-01
    • 2012-05-04
    • 2017-08-30
    相关资源
    最近更新 更多