当前位置:   article > 正文

spring-boot-maven-plugin:介绍_lib-provided

lib-provided

目录

使用

引入插件

插件目标

打包:repackage

修改打包后的文件名

排除provided类型的依赖

通过指定groupId和artifactId排除某个特定的依赖

指定groupId排除groupId相关的所有依赖

 排除 spring-boot-devtools 依赖

指定Mainclass类

 生成部署原始包并生成本地可执行包

设置active profiles

设置spring-boot-maven-plugin插件的profile参数

 使用命令行,注意profile间用英文逗号分隔


 

在执行maven打包时不需要执行测试用例,使用如下2种方式实现:
-DskipTests=true : 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true: 不执行测试用例,也不编译测试用例类

当然,还可以使用maven-surefire-plugin插件配置参数控制跳过单元测试。

 

  1. <project>
  2. <build>
  3. <plugins>
  4. <plugin>
  5. <groupId>org.apache.maven.plugins</groupId>
  6. <artifactId>maven-surefire-plugin</artifactId>
  7. <version>2.20.1</version>
  8. <configuration>
  9. <!-- 不指定单元测试 -->
  10. <skipTests>true</skipTests>
  11. </configuration>
  12. </plugin>
  13. </plugins>
  14. </build>
  15. </project>

 

spring-boot-maven-plugin是spring boot提供的maven打包插件。可打直接可运行的jar包或war包。官方文档地址https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/maven-plugin/

使用

引入插件

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. </build>

插件目标

插件提供了6个maven goal

  • build-info:生成项目的构建信息文件 build-info.properties
  • help:用于展示spring-boot-maven-plugin的帮助信息。使用命令行mvn spring-boot:help -Ddetail=true -Dgoal=<goal-name>可展示goal的参数描述信息。
  • repackage:可生成可执行的jar包或war包。插件的核心goal。
  • run:运行 Spring Boot 应用
  • start:在集成测试阶段,控制生命周期
  • stop:在集成测试阶段,控制生命周期
     

打包:repackage

spring-boot-maven-plugin引入pom,执行 mvn package 命令,即可打jar包(插件默认打jar包),target文件夹里的 *.jar即为可执行jar包。

打包主要使用的是repackage ,它是spring-boot-starter-parent为插件设置的默认goal。这个goal绑定在maven的 package生命周期上,完整命令为mvn package spring-boot:repackage。在 mvn package 执行打包之后,repackage 再次打包生成可执行的 jar包或war包。

修改打包后的文件名

默认情况下,repackage生成包的名称与 mvn package 生成的原始包名称相同,而原始包被重命名为 *.origin。若想修改生成jar包的名称,可以使用如下的配置:

  1. <plugin>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. <configuration>
  5. <classifier>myExecJar</classifier><!--指定打包后的文件名-->
  6. </configuration>
  7. </plugin>

排除provided类型的依赖

默认情况下,repackage 命令生成的包,会包含项目引入的所有依赖,包括scope为provied的依赖。

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

若除去provided依赖,可以使用如下的配置:

  • 通过指定groupId和artifactId排除某个特定的依赖

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <excludes>
  8. <exclude>
  9. <groupId>org.projectlombok</groupId>
  10. <artifactId>lombok</artifactId>
  11. </exclude>
  12. </excludes>
  13. </configuration>
  14. </plugin>
  15. </plugins>
  16. </build>
  • 指定groupId排除groupId相关的所有依赖

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <excludeGroupIds>org.projectlombok</excludeGroupIds>
  8. </configuration>
  9. </plugin>
  10. </plugins>
  11. </build>

 排除 spring-boot-devtools 依赖

 若项目引入了spring-boot-devtools,默认spring-boot-devtools 会被打在包里,若想排除,应设置 repackage 的 excludeDevtools参数为true。在打war包时,还应将spring-boot-devtools 的optinal设置为true或将scope设置为provided。

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <executions>
  7. <execution>
  8. <id>repackage</id>
  9. <configuration>
  10. <excludeDevtools>true</excludeDevtools>
  11. </configuration>
  12. </execution>
  13. </executions>
  14. </plugin>
  15. </plugins>
  16. </build>

指定Mainclass类

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

打可执行jar包时,示例如下:

  1. Manifest-Version: 1.0
  2. Archiver-Version: Plexus Archiver
  3. Built-By: beauty
  4. Start-Class: com.demo.Application
  5. Spring-Boot-Classes: BOOT-INF/classes/
  6. Spring-Boot-Lib: BOOT-INF/lib/
  7. Spring-Boot-Version: 2.2.1.RELEASE
  8. Created-By: Apache Maven 3.6.3
  9. Build-Jdk: 1.8.0_251
  10. Main-Class: org.springframework.boot.loader.JarLauncher

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

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <mainClass>com.demo.Application</mainClass>
  8. </configuration>
  9. </plugin>
  10. </plugins>
  11. </build>

可以看出,打可执行jar包时,spring-boot-maven-pluginmainClass参数对应的是 Manifest 文件中的Start-Class属性,即项目的启动类。

Manifest 文件中的Main-Class属性由插件的 layout 决定。layout属性值默认为jar/war。layout种类有:

  • JAR,即通常的可执行jar。Main-Class : org.springframework.boot.loader.JarLauncher
  • WAR,即通常的可执行war。Main-Class : org.springframework.boot.loader.warLauncher。为避免将war包部署在容器中运行时可能的冲突问题,provided类型的依赖都被放置在可执行war包的WEB-INF/lib-provided文件夹中,包括直接运行war需要的内置容器。
  • ZIP,亦可作DIR,类似于JAR。Main-Class : org.springframework.boot.loader.PropertiesLauncher
  • NONE,打包所有依赖库和项目资源,但是不打包任何启动器。可以看到在layout为NONE时,打出的包中的org文件夹没有了,Manifest 文件中没有Start-Class属性,Main-Class属性值为项目的启动类。
  1. Manifest-Version: 1.0
  2. Archiver-Version: Plexus Archiver
  3. Built-By: beauty
  4. Spring-Boot-Classes: BOOT-INF/classes/
  5. Spring-Boot-Lib: BOOT-INF/lib/
  6. Spring-Boot-Version: 2.2.1.RELEASE
  7. Created-By: Apache Maven 3.6.3
  8. Build-Jdk: 1.8.0_251
  9. Main-Class: com.demo.Application

 生成部署原始包并生成本地可执行包

 repackage 默认用可执行包代替原始包。如果项目需要部署原始包,但也需要生成可执行包供本地运行,可配置attachfalse。此时也生成原始包和可执行包,只有原始包会被安装部署。官方文档

  1. <plugin>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. <version>2.2.1.RELEASE</version>
  5. <executions>
  6. <execution>
  7. <id>repackage</id>
  8. <goals>
  9. <goal>repackage</goal>
  10. </goals>
  11. <configuration>
  12. <attach>false</attach>
  13. </configuration>
  14. </execution>
  15. </executions>
  16. </plugin>

设置active profiles

设置spring-boot-maven-plugin插件的profile参数

  1. <build>
  2. ...
  3. <plugins>
  4. ...
  5. <plugin>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-maven-plugin</artifactId>
  8. <configuration>
  9. <profiles>
  10. <profile>foo</profile>
  11. <profile>bar</profile>
  12. </profiles>
  13. </configuration>
  14. ...
  15. </plugin>
  16. ...
  17. </plugins>
  18. ...
  19. </build>

 使用命令行,注意profile间用英文逗号分隔

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/135866
推荐阅读
相关标签
  

闽ICP备14008679号