Есть ли у maven серфинг argLine переопределить ./mvn/jvm.config? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть проект со следующим ./mvn/jvm.config:

-Xms32g -Xmx64g -XX:MaxDirectMemorySize=20g

Мне было интересно, могу ли я настроить свой плагин для maven surfire следующим образом:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <argLine>-Xms12g -Xmx30g -XX:MaxDirectMemorySize=30g</argLine>
        <suiteXmlFiles>
            <suiteXmlFile>src/test/resources/RunMmoTests.xml</suiteXmlFile>
        </suiteXmlFiles>
    </configuration>
</plugin> 

I Я знаю, что мой jvm.config установит переменную окружения MAVEN_OPTS, но я не могу найти документацию с указанием приоритета между MAVEN_OPTS и surfire argLine. Какой из них перекрывает другой? После запуска некоторых тестов у меня возникает ощущение, что серфинг argLine переопределяет любой аргумент, определенный в MAVEN_OPTS. Правильно ли мое предположение ??

Большое спасибо

1 Ответ

1 голос
/ 03 мая 2020

Если argLine не определяет параметры JVM, наверняка разветвленный jvm наследует параметры jvm, определенные в .mvn / jvm.config?

Не будет. У вас могут быть совершенно другие требования для сборки проекта, чем для запуска тестов.

Здесь комментарий в исходном коде maven-surefire:

По умолчанию JVM будет новым экземпляром той же виртуальной машины, что и один раньше управлял Maven. Настройки JVM не наследуются от MAVEN_OPTS.

Когда мы вызываем команду mvn (mvn.cmd или bin/mvn), Maven считывает и устанавливает различные переменные среды и делает это по-разному в Linux и Windows.

  • При Linux команда mvn устанавливает переменную MAVEN_OPTS, объединяя существующий MAVEN_OPTS с файлом $MAVEN_PROJECTBASEDIR/.mvn/jvm.config, а затем вызывает java передача MAVEN_OPTS в качестве параметра.
  • On Windows, команда mvn устанавливает JVM_CONFIG_MAVEN_PROPS с содержанием jvm.config, а затем вызывает java прохождение MAVEN_OPTS и JVM_CONFIG_MAVEN_PROPS

Плагин surefire запускает отдельный процесс для выполнения теста, вызывая команду java, но не пропускает MAVEN_OPTS или JVM_CONFIG_MAVEN_PROPS в качестве параметров для JVM.

Если вы хотите установить те же параметры JVM для запуска теста, что и для запуска maven, то вы можете использовать $ {parameters} в argLines. Например, как это:

<configuration>
  <argLine>${MAVEN_OPTS}</argLine>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...