写了一个springcloud项目,准备到linux环境上,但生成的jar包一直运行不了,然后找了很多资料,改了一个又出现新bug,卡在这折腾了一天
我的项目结构:teach-evaluate为父项目,在pom中控制版本号
commons为被依赖的项目,包括所有实体类和工具类
所有其他项目都依赖commons
编译的Jar包运行不了: no main manifest attribute
需要先在mainClass中标识springboot的入口类
build标签下一定不能有 pluginManagement 标签
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- <executable>true</executable>-->
<includeSystemScope>true</includeSystemScope>
<mainClass>xxx</mainClass>
</configuration>
</plugin>
</plugins>
</build>
如上 为springboot的maven插件,用这个插件打包会生成一个jar包和一个.jar.original文件
打成的jar包可以直接运行,但是不能传递依赖
按理说都已经导入依赖了,结果还是无法引入依赖
解决方案(三选一):
1、不要将此插件放到顶级父工程中,在需要打成可执行jar的地方添加就好了,如果是被依赖的,就不要添加此插件,如果即依赖A 又被C依赖,则不用
(如上述案例中,就是commons和最外层的父项目不加,其他都需要加);
2、在需要对外提供依赖的项目的pom里设置(如本项目的commons),这样设置会让项目生成两个jar:一个可执行jar,一个可依赖的jar;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 生成可执行的jar的名字:xxx-exec.jar -->
<!-- 不固定,写成abcd都可以 -->
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
3、在commons中的configuration中加入skip标签,取消生成可执行jar;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>