Maven - 是否可以同时构建指定多个配置文件的项目?

时间:2016-03-02 13:01:14

标签: maven maven-3

我们正在为仅使用Web服务的应用程序开发Maven原型。这个原型提供了三个配置文件,每个配置文件对应一个环境(dev,pre,pro)。

关键是我们希望为将来可能需要它们的项目提供可选的ORM依赖项(JPA,Hibernate)。我们创建了一个包含这些依赖项的附加配置文件。

当我们构建项目时,我们使用mvn package -Denvironment = dev。是否可以指定多个配置文件,例如:mvn package -Denvironment = dev,orm?

1 个答案:

答案 0 :(得分:7)

是的,这是可能的。但是你似乎首先对how profiles are activated感到困惑。

命令

environment
如果没有进一步配置,

激活任何配置文件。在您的情况下,它的工作原理是因为POM中必须有一个配置文件定义,该配置文件定义由系统属性dev的存在激活,其值为<profiles> <profile> <activation> <property> <name>environment</name> <value>dev</value> </property> </activation> </profile> </profiles> 。您拥有的配置如下:

-Denvironment

这是使用<profile>传递系统属性时激活配置文件的神奇之处。考虑到这一点,您可以使用相同的想法激活多个配置文件:声明由系统属性的存在激活的多个<profiles> <profile> <activation> <property> <name>myAwesomeProperty1</name> <value>true</value> </property> </activation> </profile> <profile> <activation> <property> <name>myAwesomeProperty2</name> <value>true</value> </property> </activation> </profile> </profiles> 元素。

myAwesomeProperty1

如果myAwesomeProperty2true是值为-P的系统属性,则上述配置会激活这两个配置文件。

在这种特殊情况下,您似乎想要根据您的环境激活构建,因此根据-P命令行开关激活配置文件可能更好一点,而不是系统属性。

来自Introduction to Build Profiles

  

可以使用<activeProfiles> CLI选项显式指定配置文件。

     

此选项接受一个参数,该参数是逗号分隔的profile-id列表。指定此选项后,除了激活配置或settings.xml中的mvn groupId:artifactId:goal -P profile-1,profile-2 部分激活的任何配置文件外,还将激活option参数中指定的配置文件。

<profiles>
  <profile>
    <id>profile-1</id>
    <!-- rest of config -->
  </profile>
  <profile>
    <id>profile-2</id>
    <!-- rest of config -->
  </profile>
</profiles>

使用此解决方案,您可以使用多个配置文件ID调用Maven。也就是说,如果你有你的配置

profile-1

上述调用会激活profile-2和{{1}}。