maven的pom文件配置,mavenpom文件
砰的一声是什么?
pom.xml是专家的核心文件,是专家用来构建项目的配置文件,就象蚂蚁的build.xml。对于大多数项目来说,缺省的pom.xml包含了一些默认值,通常情况下你不需要在你的pom.xml里设置这些值。例如:
缺省的构建目录是"目标"目录缺省的源目录是" src/main/java "目录缺省的构建目录是" src/main/test "目录
pom.xml的配置信息包括:
项目基本信息,如项目版本、描述、开发人员、邮件列表项目依赖关系要执行的插件或目标构建配置文件
下面参考我的第一个专家命令生成的pom.xml来讲解它的配置信息
项目xmlns=1000。00 .00。
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
包装罐/包装
版本1.0-快照/版本
名称专家快速入门原型/名称
http://maven.apache.org/URL网址
属国
属国
groupId junit /groupId
artifactId junit /artifactId
版本3 .8 .1/版本
范围测试/范围
/依赖关系
/依赖关系
/项目
pom.xml文件的项目根元素。
模型版本设置砰的一声版,类似于设置项目版本,目前好像maven 2只允许该值为4.0.0
组名设置项目的组织或团体的ID,它是项目的唯一识别之一(另一个是artifactId)。组名通常以完整域名作为属性值,例如所有专家插件的组名的属性值为org.apache.maven.plugins
项目的名称设置当前项目将生成的主要伪像的唯一基本名称(请注意:是基本名称,而不是姓名,因为工件名称是由" artifactId -版本"组成,例如myapp-1.0.jar)。
包装设置此工件使用的包类型(例如罐子、战争、耳朵等。)。该属性值不仅是用来设置被生成的假象是罐子,战争还是耳朵,还用来设置包装工件时要过程的生命周期,即罐子,战争,耳朵的构建生命周期是不同的包装的缺省属性值为罐子。如果你的项目要包裹成罐子,你不需要设置该属性
版本设置项目生成的假象的版本7 .专家能帮你进行版本管理。如果你看到该属性值里包含有"快照"字符串,则表示该项目处于开发阶段,而不是发布阶段。
名字设置项目名称,该属性值通常用于专家生成的文档。
全球资源定位器(统一资源定位器)设置该项目的网站url .该属性值通常用于专家生成的文档
描述设置项目描述该属性值通常用于专家生成的文档
超级砰的一声
超级砰的一声是专家的默认POM,它设置了专家的基本默认值(例如构建目录为"目标").它的所有设置会被你的项目的pom.xml继承,你如果要覆盖缺省设置,就需要进行显式设置。
下面是超级砰的一声内容:
项目
型号版本4 .0 .0/型号版本
名称专家默认项目/名称
仓库
仓库
编号中心/id
名称专家知识库切换面板/名称
布局默认值/布局
http://repo1.maven.org/maven2/URL网址
快照
启用假/启用
/快照
/存储库
/存储库
插件库
插件工厂
编号中心/id
名称专家插件库/名称
http://repo1.maven.org/maven2/URL网址
布局默认值/布局
快照
启用假/启用
/快照
放
从不更新策略/更新策略
/版本
/pluginRepository
/插件仓库
建设
目录目标/目录
输出目录目标/类/outputDirectory
姓氏$ { POM。工件id }-$ { POM。版本}/最终名称
testOutputDirectory目标/测试类/testOutputDirectory
源目录src/main/java /sourceDirectory
脚本源目录src/main/scripts/脚本源目录
testSourceDirectory src/test/Java/testSourceDirectory
资源
资源
目录src/main/resources /directory
/资源
/资源
测试资源
测试资源
目录src/测试/资源/目录
/testResource
/testResources
/构建
报告
输出目录目标/站点/outputDirectory
/报告
/项目
最小砰的一声
一个pom.xml必须要有的东东是:
项目rootmodelVersion -应该设置为groupId -项目组的身份证.工件Id -工件(项目)版本的身份证-指定组下工件的版本
项目
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
版本1/版本
/项目
其中的groupId、artifactId和版本组成了项目的完全限定的工件名称:groupId : artifactId:版本,例如上例的完整工件名称为 com.mycompany.app:my-app:1
在最小砰的一声里,没有设置包装,那么会使用缺省值:罐子。
也没有设置仓库。如果没有仓库属性,就会继承超级砰的一声的仓库配置,maven在执行这个最小砰的一声时,就会按从缺省的存储库:http://repo1.maven.org/maven2下载相关的依赖性。
项目继承
项目继承是子项目继承父项目!
pom.xml中能被合并(合并)的元素包括:
依赖性开发人员和贡献者使用匹配的idsplugin配置资源列出(包括报告)插件执行
超级砰的一声就是项目继承最典型的例子。你也可以通过在子项目pom.xml里设置父元素,从而实现继承父pom。
示例一
场景
我们使用之前的那个artifact,com.mycompany.app:my-app:1 .同时我们还有另外一个artifact,com.mycompany.app:我的模块:1 .我的模块项目的pom.xml为:
项目
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的模块/artifactId
版本1/版本
/项目
然后我们看看这2个假象的目录结构
-我的模块
` - pom.xml
`- pom.xml
注意:my-module/pom.xml是com.mycompany.app的POM:我的模块:1而pom.xml是com.mycompany.app的POM:我的应用:1
解决方案
如果我们想让com.mycompany.app:my-app:1成为com.mycompany.app:我的模块:1的父神器,我们就需要将com.mycompany.app:我的模块:1的砰的一声修改成:
com.mycompany.app:我的模块:1的砰的一声
项目
父母
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
版本1/版本
/父母
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的模块/artifactId
版本1/版本
/项目
通过父元素,可以设置砰的一声的父pom,从而从父砰的一声里继承一些配置。
另外,如果你想该模块的组名和版本设置成和父母一样,那么你可以去掉子砰的一声的组名与版本元素。如
项目
父母
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
版本1/版本
/父母
型号版本4 .0 .0/型号版本
项目的名称我的模块/artifactId
/项目
这样就会继承父砰的一声的组名和版本
示例2
场景
示例一能够正常运行的先决条件是:父项目已经安装到本地存储库或者父项目pom.xml必须恰好处于子项目pom.xml的上一级目录。
而如果父项目没有安装到存储库或者象下列结构,使用示例一的代码是不行的:
-我的模块
` - pom.xml
`-父母
`- pom.xml
解决方案
对于上面的目录结构(或者其他不属于示例一的结构),子pom.xml需要添加相对路径元素来设置你的父项目的路径。如:
项目
父母
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
版本1/版本
相对路径./parent/pom.xml /relativePath
/父母
型号版本4 .0 .0/型号版本
项目的名称我的模块/artifactId
/项目
项目聚合
项目聚合是子项目委托父项目执行。它和项目继承很相似,项目继承是在子pom.xml里设置父项目,而项目聚合则是在父pom.xml里设置子项目。
子项目是通过在父pom.xml里定义组件来设置项目聚合的100 .项目汇总意味着在执行父项目时,也会同时执行定义了聚合的子项目。
另外还有一点要注意:设置了项目聚合的父项目pom.xml必须把包装的值设置为“pom”
示例3
场景
依然是使用示例一的父项目和子项目。
com.mycompany.app:my-app:1的砰的一声
项目
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
版本1/版本
/项目
com.mycompany.app:我的模块:1的砰的一声
项目
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的模块/artifactId
版本1/版本
/项目
目录结构
-我的模块
` - pom.xml
`- pom.xml
解决方案
如果我们要把我的模块委托给我的应用程序,我们需要修改父pom.xml如下
项目
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
版本1/版本
包装POM/包装
模块
模块我的-模块/模块
/模块
/项目
实例四
场景
示例31能够正常运行的先决条件是:子项目已经安装到本地存储库或者父项目pom.xml必须恰好处于子项目pom.xml的上一级目录。
而如果子项目没有安装到存储库或者象下列结构,使用示例3的代码是不行的:
-我的模块
` - pom.xml
`-父母
`- pom.xml
解决方案
类似于实施例3,但是设置子项目的小路不同。
项目
型号版本4 .0 .0/型号版本
groupId com。我的公司。app/groupId
项目的名称我的应用程序/artifactId
版本1/版本
包装POM/包装
模块
组件./我的模块/模块
/模块
/项目
项目继承与项目聚合
使用项目继承的情况:如果你有多个专家项目,而且它们有一些相同的配置,那么你就应该重构你的项目,把这些相同的配置从项目中提取出来,然后把这些相同配置制作成一个父项目,然后你所有的项目都继承该父项目。超级砰的一声就是最典型的项目继承例子
使用项目聚合的情况:如果你有一组项目常常需要同时进行专家构建的操作,那么你就可以创建一个父项目,然后把这组项目作为该父项目的模块,这样你只需要专家父项目即可执行这组项目。一个典型的例子就是:项目A是构建罐子,项目B是包战争,该战争会把项目A的冲突纳入,项目C是包耳朵,该耳朵会把项目B的战争纳入
当然,你可以同时使用项目继承和项目聚合,即在父项目里设置模块,同时在子项目里设置父项目。
转自:http://www。嘟嘟沃夫。com/wiki/2008/763超文本标记语言
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。