运行java -jar时无法加载Main-Class清单属性

时间:2013-10-27 16:20:57

标签: java spring maven spring-mvc

我已按照this tutorial成功构建了我的Spring MVC项目mvn clean package

现在我尝试使用以下命令运行服务:

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

但是我收到了这个错误:

无法加载Main-Class清单属性 目标/ GS-服务的web内容-0.1.0.jar

我错过了什么吗?

11 个答案:

答案 0 :(得分:124)

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

答案 1 :(得分:18)

您可能缺少Spring Boot Maven插件。

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

答案 2 :(得分: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>

答案 3 :(得分:1)

您遗漏了maven-jar-plugin,您需要在其中添加manifest标记。

答案 4 :(得分:1)

对于春季启动,我在 META-INF 文件夹中创建了 MANIFEST.MF 文件。

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

screenshot from STS IDE (eclipse project)

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. 每次提及&#34; bankim&#34; /&#34; Bankim&#34;引用我的项目名称,因此将其替换为您的项目名称
  2. 特别注意&#34; Start-Class&#34;值。它应该包含&#34;路径&#34;到具有方法的班级。
  3. 行: Main-Class:org.springframework.boot.loader.JarLaunchers应保持原样。
  4. ****上面的清单是通过使用&#34; spring-boot-maven-plugin&#34;为我创建的。上面提到的&#34; Mradul Pandey&#34; (9月2日回答&#39; 15:50回答)

    希望这有帮助

答案 5 :(得分:1)

检查

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

它应该在

之上

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

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

答案 6 :(得分:1)

for line in file.readlines(): ENTRY = copy.deepcopy(ENTRY_T) site_type, gene, score, seq = ['','','',''] ENTRY['predictor'] = 'NNSplice' line_elements = line.split() if line_elements[0] == 'Donor' or line_elements[0] == 'Acceptor': ENTRY['splice_site_type'] = line_elements[0] ENTRY['Gene_name'] = line_elements[-2] elif line_elements[0] == 'Start': pass elif int(line_elements[0]).isdigit(): ENTRY['sequence'] = line_elements[-1] ENTRY['score'] = line_elements[-2] elif line_elements == []: pass field_values = [ENTRY[i] for i in HEADERS] print(field_values) 命令假定提供的jar是可执行。在可执行 jar中,java -jar target/gs-serving-web-content-0.1.0.jar方法在main文件中定义。假设您没有MANIFEST.MF文件,则可以传递一个附加的命令行参数来指定包含MANIFEST.MF方法的类。

main这样的命令将达到目的。

答案 7 :(得分: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>

很高兴去!

答案 8 :(得分:0)

使用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> 

答案 9 :(得分: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>

学习愉快。

答案 10 :(得分:0)

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

Main-Class: com.example.MainClassApplication