今天看看Spring Boot Maven Plugin打包的一些配置。
Spring Boot Maven Plugin可以创建包含所有应用程序依赖项的可执行归档文件(jar文件和war文件),然后可以使用运行java -jar来执行项目。
一、repackage 目标是打成包含依赖的可执行包,如以下示例所示:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
默认情况下,原始(即不可执行)包文件被重命名为.original,但也可以使用自定义分类器保留原始包文件。
插件会重写您的清单,尤其是管理Main-Class和Start-Class条目。如果默认设置不起作用,则必须在Spring Boot插件中配置值,而不是在jar插件中配置值。清单中的主类由Spring启动插件的layout属性控制,例如:
<configuration><!--去除开发工具,加入这个后打好的包中lib下不会有devtools包--><excludeDevtools>true</excludeDevtools><!--启动类项目中只设置一个自动会找到,但是声明layout后必须手动设置--><mainClass>${start.class}</mainClass><!--layout属性默认为由归档类型(jar或war)确定的值。可以使用以下布局:JAR:常规的可执行JAR布局。WAR:可执行的WAR布局。当将servlet部署在servlet容器中时,provided将放置依赖项WEB-INF/lib-provided以避免任何冲突war。ZIP(别名为DIR):类似于JAR使用的布局PropertiesLauncher。NONE:捆绑所有依赖项和项目资源。不捆绑引导加载程序。注意必须大写,用的是枚举类比如jar就报错了,得用JAR--><layout>ZIP</layout></configuration>
二、排除依赖项
默认情况下,repackage和run目标都将包括项目中定义的任何提供的依赖项。Spring Boot项目应该将所提供的依赖项视为运行应用程序所需的“容器”依赖项。有些依赖可能根本不需要,应该从可执行jar中排除。为了保持一致性,它们在运行应用程序时也不应该出现。
如果需要排除其中一些依赖关系,则可以使用以下exclude选项,默认情况下,会自动排除Devtools(您可以使用excludeDevtools属性来控制它)。为了使它与war打包一起使用,spring-boot-devtools必须将依赖项设置为optional或设置为provided范围。
<configuration><!--去除开发工具,加入这个后打好的包中lib下不会有devtools包--><excludeDevtools>true</excludeDevtools></configuration>
反编译后可以看到打好的包里没有了devtools依赖包:
有两种方法可以在运行时打包/使用中排除依赖项:
- 由groupId、artifactId和classifier标识的特定依赖排除.比如以下例子排除了com.example:module1依赖:
<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>com.example</groupId><artifactId>module1</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
2.排除属于给定groupId的任何依赖。以下例子排除了属于该com.example组的任何依赖包:
<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludeGroupIds>com.example</excludeGroupIds></configuration></plugin></plugins></build></project>
END