在不使用spring-boot-maven-plugin插件打包springboot的web项目生成的jar包是无法直接运行的。因为直接打包的jar包仅仅是一个普通的jar包,没有打包依赖也没有指定main-class,所以无法直接运行。

所以需要在pom中引入spring-boot-maven-plugin插件。该插件的作用是对普通的jar包做repackage,从而生成一个可执行的jar文件。该插件的goal主要有:repackage和run。repackage目标用于打包生成可执行的jar文件,run用于启动springboot应用程序。

pom配置:

<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.1.RELEASE</version>
</plugin>
</plugins>
</build>

这里首先使用了finalName标签配置了生成的jar文件的名称,这样做可以覆盖默认的jar文件,去掉版本号信息。然后在plugins标签下配置了spring-boot-maven-plugin插件。在如上配置下,使用mvn构建可执行jar时,需要显示指定运行插件的goal,比如repackage目标:

mvn clean package spring-boot:repackage

这里先执行了clean生命周期,再执行default生命周期的package阶段,最后是spring-boot插件的repackage目标。需要注意的是,在执行repackage目标时,必须先执行default生命周期的至少是package的阶段,生成一个默认的jar文件,然后spring-boot插件的repackage目标才能执行成功,如果直接执行repackage,会报错:
Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:2.0.1.RELEASE:repackage failed: Source file must be provided -> [Help 1]

当然,每一次手动执行repackage目标比较麻烦,可以在execution标签内指定默认执行的goal:

<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.1.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

采用如上配置时,只需要运行mvn的package阶段即可,由于repackage目标默认绑定在default生命周期的package阶段,所以运行mvn的package时,便会按照如上配置执行repackage目标:

mvn clean package

实际使用时,也推荐配置execution标签。

 

run目标执行比较简单,不做过多介绍,例子:

mvn spring-boot:run

 

参考:​​https://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html​