Подтвердить что ты не робот

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>

Это логически подходит для меня, но способ, которым он обходится, по-видимому, не будет мешем.

4b9b3361

Ответ 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".