首页 » Maven实战 » Maven实战全文在线阅读

《Maven实战》14.4.3 profile的种类

关灯直达底部

根据具体的需要,可以在以下位置声明profile:

·pom.xml:很显然,pom.xml中声明的profile只对当前项目有效。

·用户settings.xml:用户目录下.m2/settings.xml中的profile对本机上该用户所有的Maven项目有效。

·全局settings.xml:Maven安装目录下conf/settings.xml中的profile对本机上所有的Maven项目有效。

·profiles.xml(Maven 2):还可以在项目根目录下使用一个额外的profiles.xml文件来声明profile,不过该特性已经在Maven 3中被移除。建议用户将这类profile移到settings.xml中。

2.7.2节已经解释过,为了不影响其他用户且方便升级Maven,用户应该选择配置用户范围的settings.xml,避免修改全局范围的settings.xml文件。也正是因为这个原因,一般不会在全局的settings.xml文件中添加profile。

像profiles.xml这样的文件,默认是不会被Maven安装到本地仓库,或者部署到远程仓库的。因此一般来说应该避免使用,Maven 3也不再支持该特性。但如果在用Maven 2,而且需要为几十或者上百个客户执行不同的构建,往POM中放置这么多的profile可能就不太好。这时可以选择使用profiles.xml,如代码清单14-15所示。

代码清单14-15 使用profiles.xml

如果是Maven 3,则应该把这些内容移动到settings.xml中。

不同类型的profile中可以声明的POM元素也是不同的,pom.xml中的profile能够随着pom.xml一起被提交到代码仓库中、被Maven安装到本地仓库中、被部署到远程Maven仓库中。换言之,可以保证该profile伴随着某个特定的pom.xml一起存在,因此它可以修改或者增加很多POM元素,见代码清单14-16。

代码清单14-16 POM中的profile可使用的元素

从代码清单14-16中可以看到,可供pom中profile使用的元素非常多,在pom profile中用户可以修改或添加仓库、插件仓库以及部署仓库地址;可以修改或者添加项目依赖;可以修改聚合项目的聚合配置;可以自由添加或修改Maven属性;添加或修改项目报告配置;pom profile还可以添加或修改插件配置、项目资源目录和测试资源目录配置以及项目构件的默认名称。

与pom.xml中的profile对应的,是其他三种外部的profile,由于无法保证它们能够随着特定的pom.xml一起被分发,因此Maven不允许它们添加或者修改绝大部分的pom元素。举个简单的例子。假设用户Jack在自己的settings.xml文件中配置了一个profile,为了让项目A构建成功,Jack在这个profile中声明几个依赖和几个插件,然后通过激活该profile将项目构建成功了。但是,当其他人获得项目A的源码后,它们并没有Jack settings.xml中的profile,因此它们无法构建项目,这就导致了构建的移植性问题。为了避免这种问题的出现,Maven不允许用户在settings.xml的profile中声明依赖或者插件。事实上,在pom.xml外部的profile只能够声明如代码清单14-17所示几个元素。

代码清单14-17 POM外部的profile可使用的元素

现在不用担心POM外部的profile会对项目产生太大的影响了,事实上这样的profile仅仅能用来影响到项目的仓库和Maven属性。