【问题标题】:maven profile dependencyMaven 配置文件依赖
【发布时间】:2011-05-05 05:15:00
【问题描述】:

我有一个带有 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?

【问题讨论】:

    标签: maven-2 maven profiles


    【解决方案1】:

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

    【讨论】:

    • 很遗憾,这不是受支持的功能。
    【解决方案2】:

    是否有办法确保用户不能仅使用 profile-b 安装模块?还是单独使用 profile-b 时自动激活 profile-a?

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

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

    <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)

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

    相关问题

    【讨论】:

      【解决方案3】:

      把它放在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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        相关资源
        最近更新 更多