Springcloud的Maven插件(⼀):repackage⽬标
简介
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构建的⽣命周期中。
下⾯我们详细看下repackage这个⽬标。
⼀、简单引⽤
⽤了重新打包应⽤程序,我们需要在l⽂件中加⼀个简单的引⽤到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 ...
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>
15<goals>
16<goal>repackage</goal>
17</goals>
18</execution>
fold过去式
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
五、打包时排除resources下的资源⽂件
1<build>
2 ...
3<resources>
4<resource>
5<directory>src/main/resources</directory>
6<excludes>
7<exclude>**/*.properties</exclude>
8<exclude>**/*.xml</exclude>
9<exclude>**/*.yml</exclude>
10</excludes>
11</resource>
12</resources>
13<plugins>
14 ...
16<groupId>org.springframework.boot</groupId>
17<artifactId>spring-boot-maven-plugin</artifactId>
18<executions>
19<execution>
20<goals>
21<goal>repackage</goal>
22</goals>
23</execution>
24</executions>
25</plugin>
26 ...
27</plugins>
28 ...
29</build>
排除resources下的资源⽂件
喜欢请微信扫描下⾯⼆维码,关注我公众号--“精修Java”,做⼀些实战项⽬中的问题和解决⽅案分享。