为什么我将jar的springboot打包,它告诉我:没有主清单属性

时间:2019-01-10 04:14:55

标签: java maven spring-boot intellij-idea

我使用很多方法来获得想法。但是,当我输入java -jar ****.jar时,它告诉我no main manifest attribute, in quark-common.jar

这是我的项目的网址:https://github.com/ZYao123/JavaQuarkBBS。该项目有5个模块。它们可以实现我的想法,但是当我想为Linux打包jar时,问题就出现了。 该模块取决于quark-parentquark-parent仅具有一个pom.xml用于公共软件包。 我已在pom.xml的{​​{1}}上添加了此标签,但它们无法正常工作。 我知道它的发生是因为找不到主要方法,但是我应该如何解决呢?

quark-common

<parent>
    <artifactId>quark-parent</artifactId>
    <groupId>com.quark</groupId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../quark-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.quark</groupId>
<artifactId>quark-common</artifactId>
<packaging>jar</packaging>

<build>
    <finalName>quark-common</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.5.6.RELEASE</version>
        </plugin>
    </plugins>
</build>

1 个答案:

答案 0 :(得分:0)

因此,我已经在本地构建了您的项目,并且在quark-common.jar中进行了清单显示:

    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Created-By: Apache Maven 3.5.2
    Built-By: ...
    Build-Jdk: 10.0.2

它没有主类,也缺少其他属性。 原因是您不需要spring-boot-maven-plugin的配置。应该是这样的:

  . . .
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.5.6.RELEASE</version>
    <executions>
      <execution>
        <id>repackage</id>
        <goals>
          <goal>repackage</goal>
        </goals>
        <configuration>
          <classifier>exec</classifier>
        </configuration>
      </execution>
    </executions>
. . .

结果MANIFEST.MF类似于:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven 3.5.2
Built-By: ...
Build-Jdk: 10.0.2
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.quark.common.CommonApplication
Spring-Boot-Version: 1.5.6.RELEASE
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib

然后您使用java -jar quark-common-exec.jar运行您的应用程序(它将创建扩展名为exec的其他可执行工件)。

希望这会对您有所帮助。

更新

回答您的问题:

我想发生这种情况是因为您正在使用spring-boot-dependencies bom(它提供了)。在您的其他项目中,您使用spring-boot-starter-parent作为模块的父级。像这样:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
</parent>

因此,它具有所有必需的插件配置。而spring-boot-dependencies bom却没有,它只是提供了依赖项和插件的版本。