60

mvn clean package按照本教程,我已经成功地构建了我的 Spring MVC 项目。

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

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

但我得到这个错误:

无法从 target/gs-serving-web-content-0.1.0.jar 加载 Main-Class 清单属性

我错过了什么吗?

4

12 回答 12

157

如果您正在使用 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>

参考指南 | Spring Boot Maven 插件

于 2015-09-02T04:50:00.330 回答
21

您可能缺少 Spring Boot Maven 插件。

<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
于 2015-09-14T19:33:08.983 回答
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>
于 2013-10-27T16:46:26.520 回答
2

检查顺序

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

它应该在上面

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

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

于 2018-09-14T13:18:29.163 回答
1

您缺少maven-jar-plugin需要添加manifest标签的地方。

于 2013-10-27T16:37:55.873 回答
1

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

在我的 STS IDE 中,我将 META-INFO 文件夹放在src/main/resources文件夹中,如下所示:

来自 STS IDE(eclipse 项目)的屏幕截图

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”值。它应该包含具有您的主要方法的类的“路径”。
  3. 该行: Main-Class: org.springframework.boot.loader.JarLaunchers 应该保持原样。

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

希望这可以帮助

于 2017-10-16T17:37:52.430 回答
1

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

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

于 2020-03-14T12:42:55.810 回答
0

我有,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>

很高兴去!

于 2019-06-12T10:23:23.547 回答
0

利用spring-boot-maven-plugin

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

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

<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> 
于 2019-08-09T11:32:07.823 回答
0

如果你的插件配置和我的一样 ( 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>

快乐学习。

于 2020-07-03T14:19:19.923 回答
0

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

Main-Class: com.example.MainClassApplication
于 2021-02-10T13:32:00.767 回答
0

您可以使用

mvn 包 spring-boot:repackage

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

.

于 2021-12-29T14:00:16.863 回答