Maven верный: добавить в argLine

У меня есть 2 профиля, которые могут или не могут использоваться вместе для запуска группы тестов. Каждому из них требуются разные vmargs для запуска, но если они используются вместе, можно добавить их друг к другу.

То, что я ищу, - это способ установить argLine как конкатенацию его текущего значения плюс то, что я установил.

Я надеялся, что это так же просто, как

<argLine>${argLine} -DnewVMArg</argLine>

Есть ли что-то подобное, что я могу сделать, чтобы это произошло?

Я попытался исправить это, в результате чего maven застрял в рекурсивном цикле. Это задокументировано ниже.

Моя последняя попытка была определить свойство <my.argLines></my.argLines> глобально, а затем изменить это в профилях.

В каждом профиле в блоке свойств я установил переопределение свойства следующим образом:

<my.argLines>${my.argLines} -myUniqueToProfileArgs</my.argLines>

В каждой верной конфигурации для профилей я устанавливаю <argLines> быть:

<argLines>${my.argLines}</argLines>

Это логично для меня, но то, как оно оценивается, явно не идет вразрез.

4 ответа

Определите ваши аргументы по умолчанию -DnewVMArg внутри argLine как ниже:

<properties>
    <customArg/>
    <argLine>${customArg} -DnewVMArg</argLine>
</properties>

Определить аргументы профилей

<profiles>
    <profile>
        <id>profile1</id>
        <properties>
            <customArg>-DmyUniqueToProfile1Args</customArg>
        </properties>
    </profile>
    <profile>
        <id>profile2</id>
        <properties>
            <customArg>-DmyUniqueToProfile2Args</customArg>
        </properties>
    </profile>
</profiles>

Дополнительная настройка плагина не требуется

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <configuration/>
        </plugin>
....

Я проверил эту конфигурацию, мои результаты ниже.

По умолчанию

mvn surefire:test -X 

Результат

(...)java -jar -DnewVMArg (...) 

Цель с профилем

mvn surefire:test -X -Pprofile1

Результат

(...)java -DmyUniqueToProfile1Args -DnewVMArg -jar (...) 

Если вы имеете дело только с системными свойствами -D, вы можете использовать вместо , и тогда они будут объединены естественным образом. Один из профилей может иметь:

<systemPropertyVariables>
    <propertyFromProfile1>value1</propertyFromProfile1>
</systemPropertyVariables>

и второй профиль:

<systemPropertyVariables>
    <propertyFromProfile2>value2</propertyFromProfile2>
</systemPropertyVariables>

Кроме того, стоит отметить, что этот подход позволяет переопределять в дочерних помпонах отдельные свойства родительских помпонов.

Как вы узнали, свойство не может ссылаться на себя.

Вам необходимо определить различные свойства для каждого профиля и, наконец, объединить их в вашем верном вызове:

<properties>
  <!-- it is a good idea not to use empty or blank properties -->
  <first.props>-Dprofile1Active=false</first.props>
  <second.props>-Dprofile2Active=false</second.props>
</properties>
...
    <!-- surefire configuration -->
    <argLine>${first.props} ${second.props}</argLine>    
...
<profile>
  <id>first</id>
  <properties>
    <first.props>-myUniqueToProfile1Args</first.props>
  </properties>
</profile>
<profile>
  <id>second</id>
  <properties>
    <second.props>-myUniqueToProfile2Args</second.props>
  </properties>
</profile>

Также обратите внимание на непустое значение по умолчанию. У Maven есть какой-то удивительный способ справиться с этим. Чтобы быть в безопасности, используйте безобидные непустые значения по умолчанию (см. "Пустые" и "пустые" аргументы в Maven)

Затмение: Окно -> Настройки -> TestNG -> Maven Снимите флажок "argLine".

Другие вопросы по тегам