【问题标题】:Maven Error: Could not find or load main class (pom.xml file)Maven 错误:无法找到或加载主类(pom.xml 文件)
【发布时间】:2018-05-10 20:57:44
【问题描述】:

我正在努力执行我正在创建的 jar 文件。这是我的 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<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.mycompany</groupId>
    <artifactId>mavenproject3</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
   </properties>

   <build>
    <plugins>
        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.mycompany.mavenproject3.SSBStub</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

    <dependencies>   
        <dependency>
            <groupId>com.github.tomakehurst</groupId>
            <artifactId>wiremock-standalone</artifactId>
            <version>2.17.0</version>
        </dependency>
    </dependencies>
</project>

当我尝试在命令提示符下运行此 jar 文件时,我收到一条错误消息“无法找到或加载主类”。我已经尝试了一切,似乎无法解决它。有人可以帮我解决这个问题吗?

另外,有人可以告诉我在哪里可以找到清单文件吗?我不知道在netbeans哪里找。

谢谢

【问题讨论】:

  • 你的 jar 文件中是否存在SSBStub.class
  • 应该可以。它是我的主要课程。我创建这个 jar 文件的方式是在 pom.xml 文件“全新安装”上运行以下目标。这创建了我假设包含该类的 jar 文件。我不确定如何检查jar文件是否包含文件
  • 发布jar -tf &lt;your.jar&gt;日志。
  • @lexicore,嗯,当我尝试在命令提示符下运行该命令时,我收到一条消息说 jar 无法识别为内部或内部命令
  • JDK 是否安装正确?

标签: java maven netbeans


【解决方案1】:

如果您尝试使用命令提示符运行它,您会希望所有依赖项都存在于您的 jar 本身中。

您可以为此使用 maven-assembly-plugin。使用下面的代码来实现这一点。

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <!-- get all project dependencies -->
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <!-- MainClass in mainfest make a executable jar -->
                <archive>
                  <manifest>
                    <mainClass>com.mycompany.mavenproject3.SSBStub</mainClass>
                  </manifest>
                </archive>

            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <!-- bind to the packaging phase -->
                <phase>package</phase> 
                <goals>
                    <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>

使用 maven 目标运行:mvn clean package

这应该在您的目标目录中创建两个 jar。一种没有依赖关系,一种具有所有依赖关系。运行名为:myJar-jar-with-dependencies.jar

【讨论】:

  • 快速提问,所以我有一个依赖项,该依赖项的名称是:wiremock-standalone。有没有特定的方式在描述符 refs 标签之间传递它?
  • 我还收到一条错误消息,指出插件标签格式错误。我在结束属性标记之后添加了你给我的代码
  • @Matt 你应该添加这个代码而不是你的 jar-plugin 作为 --given-code---
  • @Matt 理想情况下,您希望将项目的所有依赖项添加到 jar 文件中,为什么要将其添加到描述符引用中?
  • 嗨@Aman J,我已经做到了。我现在收到以下错误:jar 文件中的“No main manifest attribute”。
猜你喜欢
  • 2015-06-04
  • 2020-08-29
  • 2012-06-22
  • 2023-02-19
  • 2017-07-30
  • 2016-05-21
  • 2015-12-22
  • 1970-01-01
相关资源
最近更新 更多