Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven jar插件找不到我的主类_Java_Maven - Fatal编程技术网

Java maven jar插件找不到我的主类

Java maven jar插件找不到我的主类,java,maven,Java,Maven,我有一个Java/Selenium/TestNG/Maven项目。我可以成功创建myproj-0.0.1-SNAPSHOT.jar文件。当我尝试运行它时,我得到一个错误: $ java -jar myproj-0.0.1-SNAPSHOT.jar Error: Could not find or load main class utilities.MavenTestInvoker 我的主要目标是能够运行这个SNAPSHOT.jar文件,以便在远程机器上运行测试用例 我正在pom.xml中使用构

我有一个Java/Selenium/TestNG/Maven项目。我可以成功创建myproj-0.0.1-SNAPSHOT.jar文件。当我尝试运行它时,我得到一个错误:

$ java -jar myproj-0.0.1-SNAPSHOT.jar
Error: Could not find or load main class utilities.MavenTestInvoker
我的主要目标是能够运行这个SNAPSHOT.jar文件,以便在远程机器上运行测试用例

我正在pom.xml中使用构建插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <suiteXmlFiles>
                    <suiteXmlFile>testng.xml</suiteXmlFile>
                </suiteXmlFiles>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>utilities.MavenTestInvoker</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

org.apache.maven.plugins
maven编译器插件
3.6.0
1.8
1.8
org.apache.maven.plugins
maven surefire插件
2.19.1
testng.xml
真的
org.apache.maven.plugins
maven jar插件
2.3.2
真的
公用事业公司
当我构建项目时,我使用maven命令:“mvncleanpackage shade:shade”

这创造了我的优步罐

以下是依赖项:

<dependencies>
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.shared</groupId>
        <artifactId>maven-invoker</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
    </dependency>
plus some others
</dependencies>

org.apache.maven.plugins
maven资源插件
3.0.1
org.apache.maven.shared
maven调用程序
2.2
org.apache.maven.plugins
maven阴影插件
2.4.3
加上其他一些

我做错了什么?

包含插件依赖项的正确用法如下,您可以在单个位置合并插件依赖项-

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.2</version>
            <!--Notice I have removed the configs here. Not required to generate the jar-->
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.shared</groupId>
                <artifactId>maven-invoker</artifactId>
                <version>2.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

org.apache.maven.plugins

请记住,您的项目必须具有正确的文件夹结构,例如,您的代码必须位于src/main/java中。

main类在这里应该做什么?此外,您还没有共享您的POM中定义了
shade
插件的内容,你能简单描述一下你做上述工作的最终目的吗?@nullpointer我希望能够运行新创建的jar文件:java-jar myproj-0.0.1-SNAPSHOT.jar,并让它运行我的selenium测试用例。@nullpointer main类应该是我java程序的入口点。它应该从utilities包和MavenTestInvoker类中获取main方法。您可以使用启动一个包含依赖项的jar。这样行吗?或者我应该在插件中使用这个吗?@WillByers如果您在代码中没有使用任何插件实现,那么这些都是插件依赖项。我建议在
中使用它们。这取决于你最终想要实现什么。好吧,你所说的话的份量终于被理解了。我已经对pom.xml文件进行了更改。不过,我仍在尝试设置jar的入口点。我不需要配置,这样我就可以声明main方法在哪里?jar如何知道在utilities.MavenTestInvoker类中查找main方法?啊,是的,我看到@nullpointer。我认为他们需要指定一个主类,这样他们就可以直接使用
java-jar…
来打开jar,而不是在命令行上指定它。我想需要澄清一下是的。