中国电子商务网,企业seo解决方案,手机型号最全的网站,移动开发是做什么的转载自 Maven的pom.xml文件详解------Build Settings
根据POM 4.0.0 XSD#xff0c;build元素概念性的划分为两个部分#xff1a;BaseBuild#xff08;包含poject build和profile build的公共部分#xff0c;见下#xff09;和poject build包含的一些高级特性。
p…转载自 Maven的pom.xml文件详解------Build Settings
根据POM 4.0.0 XSDbuild元素概念性的划分为两个部分BaseBuild包含poject build和profile build的公共部分见下和poject build包含的一些高级特性。
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd...!-- Project Build contains more elements than just the BaseBuild set --build.../buildprofilesprofile!-- Profile Build contains a subset of Project Builds elements --build.../build/profile/profiles
/project BaseBuild元素集合
basic elements
builddefaultGoalinstall/defaultGoaldirectory${basedir}/target/directoryfinalName${artifactId}-${version}/finalNamefiltersfilterfilters/filter1.properties/filter/filters...
/build
1、defaultGoal执行build任务时如果没有指定目标将使用的默认值如在命令行中执行mvn则相当于执行mvn install 2、directorybuild目标文件的存放目录默认在${basedir}/target目录 3、finalNamebuild目标文件的文件名默认情况下为${artifactId}-${version} 4、filter定义*.properties文件包含一个properties列表该列表会应用的支持filter的resources中。也就是说定义在filter的文件中的namevalue值对会在build时代替${name}值应用到resources中。Maven的默认filter文件夹是${basedir}/src/main/filters/。 resources
build的另一个特征是指定你的项目中resources的位置。resources通常不是代码他们不被编译但是被绑定在你的项目或者用于其它什么原因例如代码生成。
build...resourcesresourcetargetPathMETA-INF/plexus/targetPathfilteringfalse/filteringdirectory${basedir}/src/main/plexus/directoryincludesincludeconfiguration.xml/include/includesexcludesexclude**/*.properties/exclude/excludes/resource/resourcestestResources.../testResources...
/build
1、resources一个resource元素的列表每一个都描述与项目关联的文件是什么和在哪里 2、targetPath指定build后的resource存放的文件夹。该路径默认是basedir。通常被打包在JAR中的resources的目标路径为META-INF 3、filteringtrue/false表示为这个resourcefilter是否激活。 4、directory定义resource所在的文件夹默认为${basedir}/src/main/resources 5、includes指定作为resource的文件的匹配模式用*作为通配符 6、excludes指定哪些文件被忽略如果一个文件同时符合includes和excludes则excludes生效 7、testResources定义和resource类似但只在test时使用默认的test resource文件夹路径是${basedir}/src/test/resourcestest resource不被部署。 Plugins
build...pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion2.0/versionextensionsfalse/extensionsinheritedtrue/inheritedconfigurationclassifiertest/classifier/configurationdependencies.../dependenciesexecutions.../executions/plugin/plugins
/build 除了groupId:artifactId:version标准坐标plugin还需要如下属性 1、extensionstrue/false是否加载plugin的extensions默认为false 2、inheritedtrue/false这个plugin是否应用到该POM的孩子POM默认true 3、configuration配置该plugin期望得到的properies如上面的例子我们为maven-jar-plugin的Mojo设置了classifier属性
如果你的POM有一个parent它可以从parent的build/plugins或者pluginManagement集成plugin配置。
为了阐述继承后的关系考虑如果parent POM中存在如下plugin
plugingroupIdmy.group/groupIdartifactIdmy-plugin/artifactIdconfigurationitemsitemparent-1/itemitemparent-2/item/itemspropertiesparentKeyparent/parentKey/properties/configuration
/plugin然后在继承的孩子POM中做如下配置
plugingroupIdmy.group/groupIdartifactIdmy-plugin/artifactIdconfigurationitemsitemchild-1/item/itemspropertieschildKeychild/childKey/properties/configuration
/plugin
这样孩子POM和parent POM中都存在groupId为my.group的pluginMaven默认的行为将是根据属性名称将两个plugin的configuration的内容进行合并。如果孩子POM中有一个属性则该属性是有效的如果孩子POM中没有一个属性但parent POM中存在则parent中的属性是有效的。
根据这些规则上面的例子在Maven中将得到
plugingroupIdmy.group/groupIdartifactIdmy-plugin/artifactIdconfigurationitemsitemchild-1/item/itemspropertieschildKeychild/childKeyparentKeyparent/parentKey/properties/configuration
/plugin
通过在configuration元素中增加combine.children和combine.self属性孩子POM可以控制Maven怎么合并plugin的configuration。
假定这儿是孩子POM的configuration
configurationitems combine.childrenappend!-- combine.childrenmerge is the default --itemchild-1/item/itemsproperties combine.selfoverride!-- combine.selfmerge is the default --childKeychild/childKey/properties
/configuration
则现在合并后的效果如下
configurationitems combine.childrenappenditemparent-1/itemitemparent-2/itemitemchild-1/item/itemsproperties combine.selfoverridechildKeychild/childKey/properties
/configuration
combine.childrenappend表示父POM和子POM的属性合并起来
combine.selfoverride表示子POM的属性完全覆盖父POM的。
4、dependencies同base build中的dependencies有同样的结构和功能但这里是作为plugin的依赖而不是项目的依赖。 5、executionsplugin可以有多个目标每一个目标都可以有一个分开的配置甚至可以绑定一个plugin的目标到一个不同的阶段。executions配置一个plugin的目标的execution。
假定一项绑定antrun:run目标到verify阶段我们希望任务响应build文件夹同时避免传递配置到他的孩子POM。你将得到一个execution
buildpluginspluginartifactIdmaven-antrun-plugin/artifactIdversion1.1/versionexecutionsexecutionidechodir/idgoalsgoalrun/goal/goalsphaseverify/phaseinheritedfalse/inheritedconfigurationtasksechoBuild Dir: ${project.build.directory}/echo/tasks/configuration/execution/executions/plugin/plugins
/build
id标识用于和其他execution区分。当这个阶段执行时它将以这个形式展示[plugin:goal execution: id]。在这里为 [antrun:run execution: echodir]
goals一个plugin的execution的目标列表
phase目标执行的阶段具体值看Maven的生命周期列表
inherited是否继承
configuration在指定的目标下的配置。
Plugin Management
pluginManagement的元素的配置和plugins的配置是一样的只是这里的配置只是用于集成在孩子POM中指定使用。例如在父POM中做如下配置
build...pluginManagementpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactIdversion2.2/versionexecutionsexecutionidpre-process-classes/idphasecompile/phasegoalsgoaljar/goal/goalsconfigurationclassifierpre-process/classifier/configuration/execution/executions/plugin/plugins/pluginManagement...
/build
则在孩子POM中我们只需要配置
build...pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-jar-plugin/artifactId/plugin/plugins...
/build
这样就可以大大的简化孩子POM中的配置。 Reporting
Reporting包含的属性对应到site阶段见Maven生命周期。特定的Maven插件能产生定义和配置在reporting元素下的报告例如产生Javadoc报告。
reportingoutputDirectory${basedir}/target/site/outputDirectorypluginspluginartifactIdmaven-project-info-reports-plugin/artifactIdversion2.0.1/versionreportSetsreportSet/reportSet/reportSets/plugin/plugins
/reporting
对于reportSets
reportSetsreportSetidsunlink/idreportsreportjavadoc/report/reportsinheritedtrue/inheritedconfigurationlinkslinkhttp://java.sun.com/j2se/1.5.0/docs/api//link/links/configuration/reportSet
/reportSets