автоматически активирует профиль, когда другой активен - PullRequest
3 голосов
/ 17 марта 2011

Я знаю, что невозможно «связать» объявление профиля.Можно сделать то, что я хочу (но не полностью), используя системные свойства в командной строке, такие как mvn -Dvar = value.И затем используйте это:

  <activation>
    <property>
      <name>var</name>
      <value>value</value>
    </property>            
  </activation>

или для одновременной активации нескольких профилей с -P profile1, profile2

Фактически у меня есть 4 профиля, и я хочу создать пятый профиль со всеми аспектами jчасть (плагины, зависимости, ...), которая должна быть активирована, только если активирован профиль 1, 2 или 3.Например, у меня нет избыточных объявлений плагинов и зависимостей.

<profile>
  <id>profile1</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <build>
    ...     
  </build>
</profile>

<profile>
  <id>profile2</id>
  <build>
    ...     
  </build>
</profile>

<profile>
  <id>profile3</id>
  <build>
    ... 
  </build>
</profile>
<profile>
  <id>profile4</id>
  <build>
    <plugins>
      <plugin>
        ...
      </plugin>
    </plugins>
  </build>
</profile>

<profile>
  <id>aop</id>
  <build>
    <plugins>
      <plugin>
        ...
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      ...
    </dependency>
    <dependency>
      ...
    </dependency>
  </dependencies>
</profile>

Проблема в том, что профиль 1 является профилем по умолчанию, и даже это должно быть возможно сделатьбез аргументов командной строки.Я попытался определить значение, но оно не работает, потому что свойство активации работает только со свойствами системы.

Я ошибаюсь?Есть ли другой способ сделать это?

Спасибо

1 Ответ

2 голосов
/ 17 марта 2011

Maven вам там не поможет, у вас не может быть никаких зависимостей или наследования между профилями, см. Также мой недавний ответ на связанный вопрос .

Вы можете явно включать или выключать профили, но нет никакого способа определить какую-либо связь между ними. Maven - это не муравей, что обычно хорошо, но это один из случаев, когда я думаю, что он больше похож на муравья.

С Введение в профили сборки :

Профиль может быть запущен / активирован несколькими способами:

  • Явное
  • Через настройки Maven
  • На основе переменных среды
  • Настройки ОС
  • Наличие или отсутствие файлов

Ничто из этого не помогает определить какую-либо связь между профилями (свойства проекта нельзя использовать, поскольку профили оцениваются во время создания проекта). Так что ваши единственные варианты -

  • соблюдайте ограничения и явно активируйте необходимые профили, используя синтаксис -P
  • написать сценарий оболочки, который инкапсулирует вызов maven и автоматически добавляет отсутствующие профили
  • Создайте собственную замену DefaultProfileSelector, как указано в моем предыдущем ответе
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...