我们正在为仅使用Web服务的应用程序开发Maven原型。这个原型提供了三个配置文件,每个配置文件对应一个环境(dev,pre,pro)。
关键是我们希望为将来可能需要它们的项目提供可选的ORM依赖项(JPA,Hibernate)。我们创建了一个包含这些依赖项的附加配置文件。
当我们构建项目时,我们使用mvn package -Denvironment = dev。是否可以指定多个配置文件,例如:mvn package -Denvironment = dev,orm?
答案 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
如果myAwesomeProperty2
和true
是值为-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}}。