Spring Boot Maven Plugin

官方用法

https://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/maven-plugin/index.html

简介

  Spring Boot Maven Plugin插件提供spring boot在maven中的支持。允许你打包可运行的jar包或war包。

  插件提供了几个maven目标和Spring Boot 应用一起工作。总的有:

  • spring-boot:repackage
  • spring-boot:run
  • spring-boot:start and spring-boot:stop 
  • spring-boot:build-info

  repackage:创建一个自动可执行的jar或war文件。它可以替换常规的artifact,或者用一个单独的classifier附属在maven构建的生命周期中。 普通打包插件打包后,执行jar需要指定main函数和启动类,通过该插件打包可以指定maven依赖的jar包和spring boot的启动类,放到MANIFEST.MF文件中。

  下面我们详细看下repackage这个目标。

一、简单引用

   用了重新打包应用程序,我们需要在pom.xml文件中加一个简单的引用到Spring Boot Maven Plugin插件中,代码如下:repaceage 最简单的结构

 1 <build>
 2   ...
 3   <plugins>
 4     ...
 5     <plugin>
 6       <groupId>org.springframework.boot</groupId>
 7       <artifactId>spring-boot-maven-plugin</artifactId>
 8       <version>1.5.7.RELEASE</version>
 9       <executions>
10         <execution>
11           <goals>
12             <goal>repackage</goal>
13           </goals>
14         </execution>
15       </executions>
16     </plugin>
17     ...
18   </plugins>
19   ...
20 </build>
repaceage 最简单的结构

二、剔除不需要的依赖

  这个例子重新打包了一个jar包或war包,这个jar包或war包被构建于maven生命周期的package阶段,包括定义在工程中的任何依赖(包括scope为provided)。如果有一些依赖模块需要被排除掉,可以使用一个exclude的选项。

  默认情况下,repackage和run这两个maven目标会包括定义在工程中的任何依赖。一些依赖被要求从可执行jar包中排除。下面有三种方式可以在包运行时排除依赖模块。

  方式1::排除一个具体的maven 模块,通过唯一的groupId和artifactId组合来实现。(如果有必要,可以加入classifier来唯一确认。)

 1 <project>
 2   ...
 3   <build>
 4     ...
 5     <plugins>
 6       ...
 7       <plugin>
 8         <groupId>org.springframework.boot</groupId>
 9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.6.RELEASE</version>
11         <configuration>
12           <excludes>
13             <exclude>
14               <groupId>com.foo</groupId>
15               <artifactId>bar</artifactId>
16             </exclude>
17           </excludes>
18         </configuration>
19         ...
20       </plugin>
21       ...
22     </plugins>
23     ...
24   </build>
25   ...
26 </project>
排除一个具体的maven模块

  方式2:排除和“指定的artifactId”相符的所有maven模块。

 1 <project>
 2   ...
 3   <build>
 4     ...
 5     <plugins>
 6       ...
 7       <plugin>
 8         <groupId>org.springframework.boot</groupId>
 9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.6.RELEASE</version>
11         <configuration>
12           <excludeArtifactIds>my-lib,another-lib</excludeArtifactIds>
13         </configuration>
14         ...
15       </plugin>
16       ...
17     </plugins>
18     ...
19   </build>
20   ...
21 </project>
排除和指定的artifactId项目的所有maven模块

  方式3:排除属于“指定的groupId”的所有maven模块。

 1 <project>
 2   ...
 3   <build>
 4     ...
 5     <plugins>
 6       ...
 7       <plugin>
 8         <groupId>org.springframework.boot</groupId>
 9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.6.RELEASE</version>
11         <configuration>
12           <excludeGroupIds>com.foo</excludeGroupIds>
13         </configuration>
14         ...
15       </plugin>
16       ...
17     </plugins>
18     ...
19   </build>
20   ...
21 </project>
排除属于指定的groupId的所有maven模块

三、重写manifest 

  这个插件还可以重写项目的manifest (可运行jar包的MANIFEST.MF),特别是管理Main-Class和Start-Class启动类。如果默认的配置不能满足需求,我们可以在这里做配置。通过插件的layout属性可以确实地控制Main-Class。

 1 <build>
 2   ...
 3   <plugins>
 4     ...
 5     <plugin>
 6       <groupId>org.springframework.boot</groupId>
 7       <artifactId>spring-boot-maven-plugin</artifactId>
 8       <version>1.5.7.RELEASE</version>
 9       <configuration>
10         <mainClass>${start-class}</mainClass>
11         <layout>ZIP</layout>
12       </configuration>
13       <executions>
14         <execution>
15           <goals>
16             <goal>repackage</goal>
17           </goals>
18         </execution>
19       </executions>
20     </plugin>
21     ...
22   </plugins>
23   ...
24 </build>
repackage mainClass

  执行打包命令:mvn package spring-boot:repackage。注意:这里不能写成mvn spring-boot:repackage。否则会报Source must refer to an existing file异常。

  layout属性默认根据archive type(jar or war)而定。总的有5中类型:

  • JAR:常规的可执行jar包的布局。
  • WAR:可执行war包的布局。
  • ZIP(和DIR一样):和使用PropertiesLauncher的jar包布局一样。
  • MODULE:包括依赖包(排除scope为provided的依赖包)和项目资源
  • NONE:包括所有的依赖包和项目资源。

四、利用classifier分离代码包和依赖包

  当自己写项目需要发布出去给别人依赖时,就只需要自己写的代码打包,依赖的包不能打进来。否则最后别人在用你提供的包时,就会出现重复包,导致最后打包时包会非常巨大。

  在这个Spring Boot Maven Plugin这个插件下,我们只需要提供classifier即可实现这个功能。具体如下:

 1 <project>
 2   ...
 3   <build>
 4     ...
 5     <plugins>
 6       ...
 7       <plugin>
 8         <groupId>org.springframework.boot</groupId>
 9         <artifactId>spring-boot-maven-plugin</artifactId>
10         <version>1.5.7.RELEASE</version>
11         <executions>
12           <execution>
13             <goals>
14               <goal>repackage</goal>
15             </goals>
16             <configuration>
17               <classifier>exec</classifier>
18             </configuration>
19           </execution>
20         </executions>
21         ...
22       </plugin>
23       ...
24     </plugins>
25     ...
26   </build>
27   ...
28 </project>
repackage classifier


五、去除多余的jar

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.johnnian.App</mainClass>
                <layout>ZIP</layout>
                <includes> 
                    <include>
                        <groupId>nothing</groupId>
                        <artifactId>nothing</artifactId>
                    </include>  
                </includes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
     <plugins>
<build>

六、执行jar文件

java -Dloader.path=/path/to/lib -jar /path/to/springboot-0.0.1-SNAPSHOT.jar 

备注:

  • /path/to/改成实际lib的路径。
  • -Dloader.path=lib文件夹路径

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值