免费商城网站,自建网络商城,网站建设公司2018-10-1,百度搜索营销一 spring-boot-maven-plugin 插件的5个Goals
spring-boot:repackage#xff0c;默认goal。在mvn package之后#xff0c;再次打包可执行的jar/war#xff0c;同时保留mvn package生成的jar/war为.origin#xff1b;重新打包存在的jar或者war包从而使他们可以在命令行使用…一 spring-boot-maven-plugin 插件的5个Goals
spring-boot:repackage默认goal。在mvn package之后再次打包可执行的jar/war同时保留mvn package生成的jar/war为.origin重新打包存在的jar或者war包从而使他们可以在命令行使用jar -jar来执行使用layoutNONE也可以简单的打包有嵌套依赖的jar(没有主类所以无法执行)它可以替代常规的构件或者连接到构建生命周期并有独立的分级。
spring-boot:run运行Spring Boot应用
spring-boot:start在mvn integration-test阶段进行Spring Boot应用生命周期的管理启动Spring应用程序。和run目标不同该目标不会阻塞并且允许其他目标来操作应用程序。这个目标通常是在应用程序集成测试套件开始之前和停止之后的继承测试脚本中使用集成spring boot应用程序到集成测试阶段从而使应用程序在集成测试程序之前启动
spring-boot:stop在mvn integration-test阶段进行Spring Boot应用生命周期的管理停止使用start目标启动的spring应用程序通常在测试套件完成后被调用。集成spring boot应用程序到集成测试阶段从而使应用程序在集成测试程序之前启动
spring-boot:build-info生成Actuator使用的构建信息文件build-info.properties
2. 配置pom.xml文件
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.5.4.RELEASE/version/plugin/plugins
/build二 应用场景
1 重新打包应用
为了重新打包应用只需要在pom文件中的plugin配置中如下
plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions
/plugin2 运行应用程序
插件包含了一个run目标该目标能够从命令行执行应用程序: mvn spring-boot:run
默认情况下应用从Maven的JVM运行。如果需要在分支中运行则指定fork选项。如果指定了jvmArguments或者agent参数分支进程也会执行。
如果需要制定某些JVM参数(如为了debug)可以使用jvmArguments参数更多细节参考 调试应用 一章。方便起见为了启用总则(profiles)可以使用特定(profiles)属性来处理参考 指定使用的配置文件 一章。
Spring Boot 1.3已经推出了devtools它是提升使用Spring Boot应用开发时经验的一个模块。启用该模块仅仅在项目中添加如下配置即可
org.springframework.boot spring-boot-devtools 1.3.0.BUILD-SNAPSHOT true
目前最新是2.0.0.BUILD-SNAPSHOT了。
当devtools运行时会在重新编译应用时进行检测变化并且自动刷新。这不仅包括资源文件也包括代码。它也提供了一个激活的可以重加在的服务器所以不管任何改变都会自动出发浏览器刷新。
devtools也可配置成仅仅静态资源改变时刷新浏览器(也就是忽略代码的改变)仅仅增加如下配置
spring.devtools.remote.restart.enabledfalse
在devtools之前该插件已经默认支持资源的及时刷新(hot refreshing)为了支持devtools功能该插件功能已经被禁用。但是可以随时恢复该功能恢复功能配置如下
build
……plugins……plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionconfigurationaddResourcestrue/addResources/configuration/plugin……/plugins……
/build当启用addResources配置时任意src/main/resources文件夹在应用运行时将被添加到应用的类路径同时任意target/class中发现重复的资源将被移除。这将在发布web应用时使资源及时刷新非常有用。例如当使用HTMLCSS和JavaScript文件时不用重新编译应用就可以立马看到变化。这对前端开发人员不用下载安装Java IDE就可以工作也是一种非常有用的方式。
需要注意的是该特性的副作用是在构建时资源过滤不起作用
为了与repackage目标保持一致run目标在构件类路径下文件时将排除在配置依赖时排除的依赖配置。更详细的的请参考 排除一个依赖 章节。
有时候在运行应用时包含测试依赖也是非常有用的。例如在测试模式下使用根目录类运行应用。如果希望这样做可以设置useTestClasspath参数的值为true。注意尽在运行应用时生效重新打包目标将不会增加测试依赖到结果jar和war包中。
3 使用集成测试
虽然可以很容易从测试(测试套件)本身启动Spring Boot程序但可能需要在构建自身来处理。为了确信围绕集成测试的Spring Boot应用的生命周期被合适的管理可以使用start和stop目标。如下配置
build
……plugins……plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionexecutionsexecutionidpre-integration-test/idgoalsgoalstart/goal/goals/executionexecutionidpost-integration-test/idgoalsgoalstop/goal/goals/execution/executions/plugin……/plugins……
/build这样的设置现在可以使用failsafe-plugin来运行你的集成测试正如你所期待的哪样。
更多详细细节参 考随机端口的集成测试的。
4 自定义分类重打包
默认情况下repackage目标将使用可执行的构件来替代原始的构件。如果希望保留原是构件并且也使用不同的分类来附属保留可执行的构件可以配置如下
说明如果不适用repackage目标那么maven执行package命令生成的jar包只有一个名称为pom.xml里面配置的name(artifactId)-version.jar
如果加入了repackage配置则maven打包生成的jar包会被重命名为name-version.jar.original,使用repackage重新打包生成的jar包名称为name-version.jar,
下面的配置就是如果希望保留原始构件生成的jar包名称不变同时也想保留repackage打包生成的jar包可以自定义命名。
projectbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionexecutionsexecutiongoalsgoalrepackage/goal/goalsconfigurationclassifierexec/classifier/configuration/execution/executions/plugin/plugins/build
/project如上配置那么使用repackage重新生成的包的名称就是name-version-exec.jar,就是在version后面追加了configuration节点中的classifier节点中的值该值是自定义的。但是如果classifier节点中什么值都不写那么就和默认的repackage配置一样即原始的构件为name-version.jar.original,repackage打包的jar为name-version.jar
5 排除依赖
默认情况下repackage和run目标都会包含所有provided scope的依赖。基于boot的项目应该考虑provided scope的依赖就像容器所需要的依赖包来使应用可以运行。
**有三种方式可以排除运行时被打包使用的依赖 1、通过指定groupId和artifactId来排除依赖(如果需要可以指定classifier这是可选的) 2、通过指定artifactId来排除所有匹配的依赖 3、通过指定groupId来排除所有属于该group的依赖 如下通过指定groupId和artifactId排除依赖 **
projectbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionconfigurationexcludesexcludegroupIdcom.foo/groupIdartifactIdbar/artifactId/exclude/excludes/configuration/plugin/plugins/build
/project如上配置就会排除对com.foo:bar的jar包
如下通过指定artifactId来排除artifactId与此匹配的所有依赖
projectbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionconfigurationexcludeArtifactIdsmy-lib,another-lib/excludeArtifactIds/configuration/plugin/plugins/build
/project如上配置就会排除所有artifactId为my-lib和another-lib的jar包
如下通过指定groupId来排除groupId与此匹配的所有依赖
projectbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionconfigurationexcludeGroupIdscom.foo/excludeGroupIds/configuration/plugin/plugins/build
/project如上配置则排除掉所有groupId为com.foo的jar包
###6 调试应用
默认情况下run目标和mvn命令是在同一个进程中执行的除非jvm参数或者客户端明确指定。可以通过使用fork属性明确的开启或者关闭是否在同一进程中执行。 如果需要fork这个进程并且进行调试可以添加需要的JVM参数来开启远程调试。如下配置为挂起进程直到有调试请求从5005端口进入。
projectbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionconfigurationjvmArguments-Xdebug -Xrunjdwp:transportdt_sorket,servery,suspendy,address5005
/jvmArguments/configuration/plugin/plugins/build
/project需要注意的是只要你指定了这些JVM参数这个进程就会自动被fork。这些jvm擦书也可以在命令行中指定确认书写正确
mvn spring-boot:run -Drun.jvmArguments“-Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address5005”
7 集成测试的随机端口
Spring Boot集成测试的一个好特性是它能够为Web应用分配一个空闲端口。当start目标插件使用时Spring Boot应用是被分离执行的这让传递给集成测试程序本身实际的端口变得非常困难。
如下的配置展示如何使用build-help-plugin插件达到相同的特性。
projectbuildpluginsplugingroupIdorg.codehaus.mojo/groupIdartifactIdbuild-helper-maven-plugin/artifactIdexecutionsexecutionidreserve-tomcat-port/idgoalsgoalreserve-network-port/goal/goalsphaseprocess-resources/phaseconfigurationportNamesportNametomcat.http.port/portName/portNames/configuration/execution/executions/pluginplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionexecutionsexecutionidpre-integration-test/idgoalsgoalstart/goal/goalsconfigurationargumentsargument--server.port{tomcat.http.port}/test.server.port/systemPropertyVariables/configuration/plugin/plugins/build现在可以在任意的集成测试中查询test.server.port系统属性来给server创建一个合适的url。
8 指定使用的配置文件
一个特定应用使用的配置文件可以通过profiles参数指定。如下配置启动了foo和bar两个配置文件
projectbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion1.3.0.BUILD-SNAPSHOT/versionconfigurationprofilesprofilefoo/profileprofilebar/profile/profiles/configuration/plugin/plugins/build
/project使用哪个配置文件也可以通过命令行参数配置如果有多个需要使用都好将他们隔开
mvn spring-boot:run -Drun.profilesbar,foo