spring-boot-maven-plugin插件

阅读数:192 评论数:0

跳转到新版页面

分类

应用软件

正文

这个插件可以简化spring-boot应用的maven打包。一般把spring boot打成jar,然后可以通过java -jar命令来启动jar包。但是这样子,它就不能被其他项目模块依赖,因为项目的class都放在了jar包BOOT-INF/classes文件夹中。解决方法:不使用spring-boot-maven-plugin打包。

此插件的5个Goals

(1)spring-boot:repackage,默认goal,在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin。

(2)spring-boot:run,运行spring boot应用

(3)spring-boot:start,集成测试阶段

(4)spring-boot:stop,集成测试阶段

(5)spring-boot:build-info,生成构建信息文件build-info.properties

 

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<configuration>
				<mainClass>com.wisea.demoh2.TestMain</mainClass>
			</configuration>
			<executions>
				<execution>
					<goals>
						<goal>repackage</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

 

打包主要使用的是repckage goal,这个goal绑定在maven的package生命周期上,完整命令为mvn package spring-boot:repackage。所以在执行mvn package时,会先生成原始包,而后repackage再次打发包生成同名的包,原始包被更名为*.origin。

 

repackage命令生成的包,默认会包含项目引入的所有依赖,包括scope为provided的依赖,若项目引入了spring-boot-devtools,默认spring-boot-devtools会被打包在里面,若想排除,应设置repackage的excludeDevtools参数为true。在打war包时,还应将spring-boot-devtools的optinal设置为true或将scope设置为provided。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>repackage</id>
                    <configuration>
                        <excludeDevtools>true</excludeDevtools>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

 

Manifest文件

repackage会在Manifest文件(位于META-INF文件夹中)中写入Main-Class and Start-Class属性。当默认值不能使用程序正常运行时,可以通过插件进行配置。示例:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: beauty
Start-Class: com.demo.beauty.BeautyApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 2.2.1.RELEASE
Created-By: Apache Maven 3.6.3
Build-Jdk: 1.8.0_251
Main-Class: org.springframework.boot.loader.JarLauncher

对应的spring-boot-maven-plugin配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.demo.beauty.BeautyApplication</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

spring-boot-maven-plugin的mainClass参数和对应的是Manifest文件中Start-Class属性,即项目的启动类。

Manifest文件中的Main-Class属性由插件的layout决定,layout种类有:

(1)JAR

Main-Class:org.springframework.boot.loader.JarLauncher

(2)WAR

Main-Class:org.springframework.boot.loader.warLauncher

为了避免将war包部署在容器中运行时可能的冲突问题,provided类型依赖都被放置在可执行war包的WEB-INF/lib-provided文件夹中,包括直接运行war的内置容器。

(3)ZIP/DIR

Main-Class:org.springframework.boot.loader.PropertiesLauncher

(4)NONE

打包所有依赖库和项目资源,但是不打包任何启动器。打出的包滑org文件夹,Manifest文件中没有Start-Class属性,Main-Class属性值为项目的启动类。

打包排除provided依赖

以scope为provided依赖,比如lombok、mybatis-plus等,只使用于编译阶段,编译完成就可以功成身退。在spring maven打包时,provided依赖会被排除在包外,但springboot maven打包时,还是会将这些依赖打进war包的lib-provided文件夹里或jar包的lib文件夹里。

<build>
   <plugins>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
           <configuration>
               <excludes>
                   <exclude>
                       <groupId>org.projectlombok</groupId>
                       <artifactId>lombok</artifactId>
                   </exclude>
               </excludes>
           </configuration>
       </plugin>
   </plugins>
</build>

或者
<build>
   <plugins>
       <plugin>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
           <configuration>
               <excludeGroupIds>org.projectlombok</excludeGroupIds>
           </configuration>
       </plugin>
   </plugins>
</build>



相关推荐

&lt;mirror&gt; &lt;id&gt;alimaven&lt;/id&gt; &lt;name&gt;

Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有<stron

在pom.xml中使用distributionManagement将项目打包上传到nexus私服(maven的一种远程私有仓库)。 <pre class="language-markup

一、概述 repositories配置jar仓库,pluginRepositories配置插件仓库。 二、通过项目pom.xml配置 <repositories> <repository>

dependencyManagement 只是声明依赖,并不实际引入,只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目继承该项。 denpende

一、前置知识 1、settings.xml中的proxy、server、repository、mirror proxy 是服务器不能直接访问外网时需要设置的代理服务。 server 是服务器

在Maven的pom.xml文件中,存在如下两种build &lt;project&gt; &lt;buil

在构建Maven项目的时候,如果没有进行特殊配置,Maven会按照 标准的目录结构查找和处理各种类型文件。 src/main/java和src/test/java <p

每个插件都都有一个&lt;skip&gt;&lt;/skip&gt;属性,maven在调用插件的时候判断这个属性的值是否是true,是true的话就跳过。 <pre class="lan

&lt;plugin&gt; &lt;groupId&gt;org.springframe