10

我有一个带有 2 个配置文件 profile-a 和 profile-b 的 maven 模块

profile-a 可以独立使用,但 profile-b 应该与 profile-a 一起运行

mvn install -P profile-a                   // valid
mvn install -P profile-a,profile-b         // valid
mvn install -P profile-b                   // INVALID

有没有办法确保用户不能只用 profile-b 安装模块?或者如果 profile-b 单独使用,则自动激活 profile-a?

4

3 回答 3

9

有没有办法确保用户不能只用 profile-b 安装模块?或者如果 profile-b 单独使用,则自动激活 profile-a?

不,没有办法从另一个触发配置文件(不支持,请参阅Brett对相关问题的回答),也无法严格禁止使用给定的配置文件。

您可以做的最好的事情是使用属性激活和公共属性来激活两个配置文件:

<project>
  ...
  </dependencies>
  <profiles>
    <profile>
      <id>profile-a</id>
      <activation>
        <property>
          <name>propertyX</name>
        </property>
      </activation>
    </profile>
    <profile>
      <id>profile-b</id>
      <activation>
        <property>
          <name>propertyX</name>
        </property>
      </activation>
    </profile>
  </profiles>
</project>

调用 mvn 时传递属性会触发它们:

$ mvn help:active-profiles -DpropertyX
[INFO] 正在扫描项目...
[信息]                                                                         
[信息] --------------------------------------------- -------------------------
[INFO] 建筑 Q4099626 1.0-SNAPSHOT
[信息] --------------------------------------------- -------------------------
[信息]
[信息] --- maven-help-plugin:2.1.1:active-profiles (default-cli) @ Q4099626 ---
[信息]
项目“com.stackoverflow:Q4099626:jar:1.0-SNAPSHOT”的活动配置文件:

以下配置文件处于活动状态:

 - profile-a(来源:pom)
 - profile-b(来源:pom)

这并不理想,但目前,这是你能得到的最好的。

相关问题

于 2010-11-04T20:16:00.973 回答
2

把它放在profile-b中。至少您可以防止错误的构建并通知用户。我没有测试它,但它应该可以工作。如有错别字,请更正:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>gmaven-plugin</artifactId>
      <executions>
        <execution>
          <id>check-profile-combinations</id>
          <phase>validate</phase>
          <goals>
            <goal>execute</goal>
          </goals>
          <configuration>
            <source>
              List profiles = project.getActiveProfiles()
              boolean profileAPresent=false
              profiles.each {
                if ( it.getId().equals("profile-a" ) {
                  profileAPresent=true
                }
              }
              if ( !profileAPresent ) {
                fail("profile-b can be used only together with profile-a")
              }
            </source>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
于 2013-08-29T11:28:58.283 回答
0

通过检查是否设置了属性,尝试使用 profile-a 中的激活元素。然后在 profile-b 中设置属性,以便 profile-a 将变为活动状态。

于 2010-11-04T18:49:19.413 回答