Maven surefire: добавить в argLine
У меня есть 2 профиля, которые могут или не могут использоваться вместе для запуска группы тестов. Каждый из них требует разных vmargs для запуска, но если они используются вместе, это нормально, чтобы они добавлялись друг к другу.
То, что я ищу, - это способ установить argLine как конкатенацию его текущего значения плюс то, что я установил.
Я надеялся, что это будет так же просто, как
<argLine>${argLine} -DnewVMArg</argLine>
Есть ли что-то подобное, что я могу сделать, чтобы это произошло?
Я попытался зафиксировать его, из-за чего maven застревает в рекурсивном цикле. Это описано ниже.
Моя последняя попытка состояла в том, чтобы определить свойство <my.argLines></my.argLines>
глобально, а затем изменить это в профилях.
В каждом профиле в блоке свойств я устанавливаю свойство overrode следующим образом:
<my.argLines>${my.argLines} -myUniqueToProfileArgs</my.argLines>
В каждой конфигурации конфигов для профилей я устанавливаю <argLines>
как:
<argLines>${my.argLines}</argLines>
Это логически подходит для меня, но способ, которым он обходится, по-видимому, не будет мешем.
Ответы
Ответ 1
Определите аргументы по умолчанию -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 (...)
Ответ 2
Если вы имеете дело только с системными свойствами -D, вы можете использовать <systemPropertyVariables> вместо <argLine> и тогда они будут объединены естественным образом. Один из профилей может иметь:
<systemPropertyVariables>
<propertyFromProfile1>value1</propertyFromProfile1>
</systemPropertyVariables>
и второй профиль:
<systemPropertyVariables>
<propertyFromProfile2>value2</propertyFromProfile2>
</systemPropertyVariables>
Кроме того, стоит упомянуть, что этот подход позволяет вам переопределить индивидуальные свойства дочерних помпей от родительских попов.
Ответ 3
Как вы узнали, свойство не может ссылаться на себя.
Вам нужно определить разные свойства для каждого профиля и, наконец, объединить их в свой верный вызов:
<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 есть удивительный способ справиться с этим. Чтобы быть в безопасности, используйте безопасные непустые значения по умолчанию (см. "Null" против "пустых" аргументов в Maven)
Ответ 4
Eclipse: Окно → Настройки → TestNG → Maven
Снимите флажок "argLine".