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".