Зависимость профиля maven

У меня есть модуль maven с 2 профилями профиля a и profile-b

profile-a можно использовать независимо, но профиль-b должен запускаться с профилем-a

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

В любом случае, чтобы убедиться, что пользователь не может установить модуль только с профилем-b? или активировать профиль-a автоматически, если только профиль-b используется?

Ответ 1

В любом случае, чтобы убедиться, что пользователь не может установить модуль только с профилем-b? или активировать профиль-a автоматически, если только профиль-b используется?

Нет, нет способа вызвать профиль из другого (не поддерживается, см. ответ Бретта на соответствующий вопрос), а также строго запретить использование данный профиль.

Лучшее, что вы можете сделать, это использовать активацию свойств и общее свойство для активации обоих профилей:

<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] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Q4099626 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-help-plugin:2.1.1:active-profiles (default-cli) @ Q4099626 ---
[INFO] 
Active Profiles for Project 'com.stackoverflow:Q4099626:jar:1.0-SNAPSHOT': 

The following profiles are active:

 - profile-a (source: pom)
 - profile-b (source: pom)

Это не идеальное, но в настоящее время лучшее, что вы можете получить.

Связанные вопросы

Ответ 2

Поместите это в профиль-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>

Ответ 3

Попробуйте использовать элемент activation в профиле-a, установив, установлено ли свойство. Затем в профиле-b установите свойство, так что профиль-a станет активным.