赞
踩
目录
通过指定groupId和artifactId排除某个特定的依赖
设置spring-boot-maven-plugin插件的profile参数
在执行maven打包时不需要执行测试用例,使用如下2种方式实现:
-DskipTests=true : 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true: 不执行测试用例,也不编译测试用例类
当然,还可以使用maven-surefire-plugin插件配置参数控制跳过单元测试。
- <project>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.20.1</version>
- <configuration>
- <!-- 不指定单元测试 -->
- <skipTests>true</skipTests>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
spring-boot-maven-plugin是spring boot提供的maven打包插件。可打直接可运行的jar包或war包。官方文档地址https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/maven-plugin/
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
插件提供了6个maven goal
将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包的名称,可以使用如下的配置:
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <classifier>myExecJar</classifier><!--指定打包后的文件名-->
- </configuration>
- </plugin>
默认情况下,repackage 命令生成的包,会包含项目引入的所有依赖,包括scope为provied的依赖。
项目中scope为provided的依赖,比如 lombok、mybatis-plus 等,只作用于编译阶段,编译完成就可以功成身退了。在spring maven打包时,provided依赖会排除在包外,但springboot maven打包时,还会将这些依赖打进 war 包的 lib-provided 文件夹里或 jar 包的 lib 文件夹里。
若除去provided依赖,可以使用如下的配置:
- <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>
若项目引入了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>
repackage 会在Manifest文件中写入Main-Class and Start-Class属性。当默认值不能使程序正常运行时,可以通过插件配置。Manifest文件位于的META-INF文件夹中。
打可执行jar包时,示例如下:
- Manifest-Version: 1.0
- Archiver-Version: Plexus Archiver
- Built-By: beauty
- Start-Class: com.demo.Application
- 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.Application</mainClass>
- </configuration>
- </plugin>
- </plugins>
- </build>
可以看出,打可执行jar包时,spring-boot-maven-plugin
的mainClass
参数对应的是 Manifest 文件中的Start-Class属性,即项目的启动类。
Manifest 文件中的Main-Class属性由插件的 layout 决定。layout属性值默认为jar/war。layout种类有:
- Manifest-Version: 1.0
- Archiver-Version: Plexus Archiver
- Built-By: beauty
- 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: com.demo.Application
repackage
默认用可执行包代替原始包。如果项目需要部署原始包,但也需要生成可执行包供本地运行,可配置attach
为false
。此时也生成原始包和可执行包,只有原始包会被安装部署。官方文档
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <version>2.2.1.RELEASE</version>
- <executions>
- <execution>
- <id>repackage</id>
- <goals>
- <goal>repackage</goal>
- </goals>
- <configuration>
- <attach>false</attach>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <build>
- ...
- <plugins>
- ...
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <profiles>
- <profile>foo</profile>
- <profile>bar</profile>
- </profiles>
- </configuration>
- ...
- </plugin>
- ...
- </plugins>
- ...
- </build>
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。