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

cod*_*ent 4 maven-3 maven

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

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

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

Tun*_*aki 7

是的,这是可能的.但是,您似乎对首先如何激活配置文件感到困惑.

命令

mvn package -Denvironment=dev
Run Code Online (Sandbox Code Playgroud)

激活而无需进一步配置任何个人资料.在您的情况下,它的工作原理是因为POM中必须有一个配置文件定义,该配置文件定义由系统属性的存在激活,其environment值为dev.您拥有的配置如下所示:

<profiles>
  <profile>
    <activation>
      <property>
        <name>environment</name>
        <value>dev</value>
      </property>
    </activation>
  </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

当您传递系统属性时,这是使配置文件激活的神奇之处-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>
Run Code Online (Sandbox Code Playgroud)

如果myAwesomeProperty1myAwesomeProperty2是具有该值的系统属性,则上述配置将激活两个配置文件true.

但在这种特殊情况下,您希望根据您的环境激活构建,因此根据-P命令行开关而不是系统属性激活配置文件可能更好.

简介到构建配置文件:

可以使用-PCLI选项显式指定配置文件.

此选项接受一个参数,该参数是要使用的逗号分隔的profile-id列表.指定此选项后,除了激活配置或其中的<activeProfiles>部分激活的任何配置文件外,还将激活option参数中指定的配置文件settings.xml.

mvn groupId:artifactId:goal -P profile-1,profile-2
Run Code Online (Sandbox Code Playgroud)

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

<profiles>
  <profile>
    <id>profile-1</id>
    <!-- rest of config -->
  </profile>
  <profile>
    <id>profile-2</id>
    <!-- rest of config -->
  </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

上面的调用将同时激活profile-1profile-2.