之前打包的项目今天打包突然发现在服务器上面运行不了了,查看日志发现提示了一行*.jar中没有主清单属性

然后就感觉挺奇怪的,之前还好好的,项目使用的是springboot,然后就查了一下资料,最后解决了问题,原因是同事修改了一个配置,记录一下解决办法:

出现这个问题先查看打包的模块pom.xml中打包的插件有没有 spring-boot-maven-plugin,如果没有需要加上下面的插件,列的完整的build,自己根据需要调整:


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


如果已经有了该插件,那需要检查一下有没有配置下面的这个配置,如果有了需要把skip的true改为false,或则删除configuration的skip这个配置,至此问题解决:


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>          
            <configuration>
                 <skip>false</skip>
            </configuration>
        </plugin>
    </plugins>
</build>


maven 插件配置设置

在项目中看到一个配置:

gradle打包 Java heap space_jar包

代码截图

如图中的这个:

<configuration><skip>true</skip></configuration>

好奇它的作用是啥,测试了一下,当没有注释这个配置时,打包的时候生成的jar包结构如下:BOOT-INF下包括了项目结构包和lib(依赖的代码jar包),最外层还有一个启动加载器类包。

gradle打包 Java heap space_jar包_02

放开配置

而当注释掉这个配置时,结构如下:

 

gradle打包 Java heap space_jar包_03

注释配置

此时所有的依赖包和启动类加载器包都没有了,只有项目代码和配置。

百度了半天无果,便找度娘老公GOOGLE了一下,找到了相关的说明:https://pitest.org/quickstart/maven/,大概说明了这个注解的意思:

配置说明:您可以通过在配置部分上添加参数skip来跳过启动

作用:它在maven模块上非常有用:当您需要跳过整个模块时,您可以在插件的声明中添加这个设置来忽略它。

总结maven-springboot项目打包的过程中跳过jar包发布运行过程,所以只会生产本项目代码相关的包,而不会加入引入和启动类加载器等包,该jar包自然也不能运行。