中文是:在app.jar中没有主清单属性
背景:单独package module的app.jar,使用java -jar app.jap,报错no main manifest attribute, in app.jar。
在父pom中加入一下内容
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.example.demo.Demo1Application</mainClass> // 根据自己的启动类进行修改,必须要有这个<mainClass>,不然打包会出错
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
两种情况
不使用module管理的项目
这种情况下就一个pom.xml,按照上面的配置就可以了。
使用module管理的项目
除了父级pom.xml 文件,每一个module中都有一个pom.xml文件。
- 首先在父项目中加入上面的配置。
- 在每个module的pom中加入
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.zhq.AppApplication</mainClass> // 改为自己的
</configuration>
</plugin>
</plugins>
</build>
说明:module中的pom会继承父pom中的中的。
总之,module模块的打包会受到父pom的影响,如果父pom配置不对,单独package某个module都会失败。要确保父pom和子module都正确。
多说一点
在多module管理的项目中如果,A module 引用了B module,在A进行package的时候,可能会报错无法找到B中的内容。这种情况需要再B module 的pom中加上配置<classifier>exec</classifier>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<classifier>exec</classifier> // 加上这个exec配置
</configuration>
</plugin>
更详细的内容,在这篇大佬博客中有分析
https://blog.csdn.net/agonie201218/article/details/110958570