【问题标题】:Failed to load Main-Class manifest attribute while running java -jar运行 java -jar 时无法加载 Main-Class 清单属性
【发布时间】:2013-11-06 08:55:52
【问题描述】:

我已经通过关注this tutorial 成功地使用mvn clean package 构建了我的Spring MVC 项目。

现在我正在尝试使用以下方式运行服务:

mvn clean package && java -jar target/gs-serving-web-content-0.1.0.jar

但我收到此错误:

加载主类清单属性失败 目标/gs-serving-web-content-0.1.0.jar

我错过了什么吗?

【问题讨论】:

标签: java spring maven spring-mvc


【解决方案1】:

如果您使用的是 Spring Boot,这将解决您的问题:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.2.5.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Reference Guide | Spring Boot Maven Plugin

【讨论】:

  • 简单地添加上面的代码并使用mvn package 对我不起作用。我不得不使用 mvn package spring-boot:repackage ,它创建了独立的应用程序。
  • 当我这样做时,我的集成测试由于 NoClassDeff 而失败...添加 post-integration-test 到执行中为我解决了它
  • mvn package spring-boot:repackage 解决了我的问题。感谢上面附上的文档。
  • mvn 包对我有用。我不必做 mvn spring-boot:repackage。我在 mac os 上使用 spring-boot 1.5.9.RELEASE + java 8。如果你有做 mvn spring-boot:repackage,那么不需要在你的 pom.xml 中添加 repackage 目标。在 pom.xml 中添加 repackage 目标的全部意义在于,当您调用 mvn package 时,maven 会自动调用 spring-boot:package。
  • 从 spring-boot-starter-parent 继承不是义务。尤其是在大型项目中,开发人员使用自己的父 pom 来管理依赖项和控制 jar hell。
【解决方案2】:

您可能缺少 Spring Boot Maven 插件。

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

【讨论】:

    【解决方案3】:

    您必须在您的 pom.xml 中指定它 - 这将使您的 jar 可执行并具有所有依赖项(替换 your.main.class):

    <!-- setup jar manifest to executable with dependencies -->
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>your.main.class</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
           <goal>single</goal>
          </goals>  
        </execution>
      </executions>
    </plugin>
    

    【讨论】:

      【解决方案4】:

      检查顺序

      <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      

      应该在上面

      dockerfile-maven-plugin 否则会重新打包

      这解决了我的清单中没有主要属性的问题。

      【讨论】:

        【解决方案5】:

        您缺少maven-jar-plugin,您需要在其中添加manifest 标签。

        【讨论】:

          【解决方案6】:

          对于 spring boot,我在 META-INF 文件夹中创建了一个 MANIFEST.MF 文件。

          在我的 STS IDE 中,我将 META-INFO 文件夹放在 src/main/resources 文件夹中 像这样:

          MANIFEST.MF 文件的内容:

          Manifest-Version: 1.0
          Implementation-Title: bankim
          Implementation-Version: 1.5.6.RELEASE
          Archiver-Version: Plexus Archiver
          Built-By: Yourname
          Implementation-Vendor-Id: com.bankim
          Spring-Boot-Version: 1.5.6.RELEASE
          Implementation-Vendor: Pivotal Software, Inc.
          Main-Class: org.springframework.boot.loader.JarLauncher
          Start-Class: com.bankim.BankimApplication
          Spring-Boot-Classes: BOOT-INF/classes/
          Spring-Boot-Lib: BOOT-INF/lib/
          Created-By: Apache Maven 3.3.9
          Build-Jdk: 1.8.0_131
          Implementation-URL: http://projects.spring.io/spring-boot/bankim/
          
          1. 每次提到“bankim”/“Bankim”都是指我的项目名称,所以用你的项目名称替换它
          2. 特别注意“Start-Class”值。它应该包含具有您的 ma​​in 方法的类的“路径”。
          3. 行: 主类:org.springframework.boot.loader.JarLaunchers 应该保持原样。

          ****以上清单是使用“Mradul Pandey”上面提到的“spring-boot-maven-plugin”为我创建的(2015 年 9 月 2 日 4:50 回答)

          希望对你有帮助

          【讨论】:

          • 您不应手动执行此操作。正确配置后,spring-boot 插件会为您创建它。令人费解的是,并非相同的解决方案适用于每个人。我必须将执行部分添加到插件中,例如否则失败。
          • 我没有手动创建它,(参见步骤 3 中提到的)。但是,是的,不确定是什么原因造成的。好久不见……
          【解决方案7】:

          java -jar target/gs-serving-web-content-0.1.0.jar 命令假定提供的 jar 是可执行的。在 executable jar 中,main 方法在 MANIFEST.MF 文件中定义。假设您没有MANIFEST.MF 文件,可以传递一个额外的命令行参数来指定包含main 方法的类。

          java -cp target/gs-serving-web-content-0.1.0.jar com.pkg.subpkg.MainClass 这样的命令可以达到目的。

          【讨论】:

            【解决方案8】:

            我有spring-boot-maven-plugin,但我仍然收到有关主类的错误。

            <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            

            最后我不得不使用maven-jar-plugin并添加mainClass

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                      <archive>
                        <manifest>
                        <mainClass>com.org.proj.App</mainClass>
                        </manifest>
                      </archive>
                    </configuration>
                </plugin>
            

            很高兴去!

            【讨论】:

              【解决方案9】:

              使用spring-boot-maven-plugin

              <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
              </plugin>
              

              并确保在 pom.xml 中设置 property start-class

              <properties>
                    <!-- The main class to start by executing "java -jar" -->
                    <start-class>org.example.DemoApplication</start-class>
              </properties>
              

              或者,可以在 pom.xml 的插件部分中将主类定义为 spring-boot-maven-plugin 的 mainClass 元素:

              <build>
                  <plugins>
                      <plugin>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-maven-plugin</artifactId>             
                          <executions>
                               <execution>
                                   <goals>
                                       <goal>repackage</goal>
                                   </goals>
                                   <configuration>
                                       <classifier>spring-boot</classifier>
                                       <mainClass>${start-class}</mainClass>
                                   </configuration>
                               </execution>
                           </executions>
                      </plugin>
                  </plugins>
              </build> 
              

              【讨论】:

                【解决方案10】:

                如果你的插件配置和我的一样(below),那么请使用mvn package spring-boot:repackage

                <build>
                    <pluginManagement>
                        <plugins>
                            <plugin>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-maven-plugin</artifactId>
                                <executions>
                                    <execution>
                                        <goals>
                                            <goal>repackage</goal>
                                        </goals>
                                    </execution>
                                </executions>
                            </plugin>
                        </plugins>
                    </pluginManagement>
                </build>
                

                快乐学习。

                【讨论】:

                  【解决方案11】:

                  您需要在 MANIFEST.MF 文件中设置您的主类:

                  Main-Class: com.example.MainClassApplication
                  

                  【讨论】:

                    【解决方案12】:

                    你可以使用

                    mvn package spring-boot:repackage

                    在目标目录之前点击这个命令 然后使用jar文件

                    .

                    【讨论】:

                      猜你喜欢
                      • 2016-09-24
                      • 2018-12-24
                      • 2019-08-11
                      • 2018-02-04
                      • 2013-06-03
                      • 2018-03-23
                      • 2013-06-10
                      • 1970-01-01
                      • 2011-02-05
                      相关资源
                      最近更新 更多