Найти параметры Java, используемые Maven

Как я могу узнать, какие параметры Java (Xmx, Xms, Xss и т. Д.) Используются Maven?

Я узнал, что их можно установить с помощью среды MAVEN_OPTS. Теперь я хочу быть уверенным в правильности настроек.

РЕДАКТИРОВАТЬ: я считаю, что это отличается от этого вопроса, так как я не хочу видеть значение переменной среды. Я скорее хочу посмотреть, какие настройки на самом деле используются Maven, будь то из env var, settings.xml или других средств.

EDIT2: меня также интересуют другие способы настройки параметров Java для сборки Maven

2 ответа

Вы можете установить параметры Java для Maven в разных точках и на уровне (глобально или через конфигурацию плагинов):

Конфигурация плагина: только для компиляции
Используя конфигурацию подключаемого модуля Maven Compiler для компиляции кода приложения и тестового кода, вы можете установить необходимые параметры Xmx, Xms, Xss через compileArgs запись конфигурации, доступная как для целей компиляции, так и для целей testCompile. Официальный пример доступен здесь и на других SO-ответах, подобных этому.
Пример также показан ниже по третьему пункту.

Конфигурация плагина: только для выполнения тестов
Используя конфигурацию плагина Maven Surefire для выполнения тестов, вы можете установить необходимые параметры Java для использования во время выполнения с помощью argLine запись конфигурации цели теста. Официальный пример доступен здесь.
Пример также показан ниже по третьему пункту.

Конфигурация плагина: через Свойства (и профили)
Вы можете объединить две опции выше (в случае общих опций Java) в качестве значения свойства для передачи обоим compileArgs а также argLine запись конфигурации или иметь разные свойства для конфигурации (в соответствии с вашими потребностями).

<property>
      <jvm.options>-Xmx256M</jvm.options>
</property>

[...]
<build>
  [...]
  <plugins>
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>3.3</version>
       <compilerArgs>
            <arg>${jvm.options}</arg>
       </compilerArgs>
    </plugin>

    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>2.19.1</version>
       <configuration>
            <argLine>${jvm.options}</argLine>
       </configuration>
     </plugin>
   </plugins>
   [...]
</build>
[...]

Использование свойств дает вам также два дополнительных преимущества (помимо централизации): вы можете использовать профили, чтобы затем персонализировать их на основе различных желаемых поведений (и, например, в этом ответе SO), и вы также можете переопределить их через командную строку, например:

mvn clean install -Djvm.options=-Xmx512

Глобальная / Конфигурация проекта: файл опций
Начиная с Maven 3.3.1, вы можете указать свои параметры в .mvn/jvm.config файл для проекта. Это альтернатива MAVEN_OPTS и более узкая область (для проекта). Однако, поскольку это новая функция Maven, люди должны знать об этом, в противном случае это может повлиять на устранение неполадок и техническое обслуживание.

Глобальная /Env конфигурация: MAVEN_OPTS
Хорошо известная переменная среды Maven для установки глобальных параметров выполнения, однако она применяется ко всем сборкам Maven, использующим эту среду (т. Е. Для каждого зарегистрированного пользователя).

При запуске Maven с помощью -X опция (отладка включена), у вас будет следующий вывод как часть вашей сборки:

[DEBUG] properties used {java.vendor=Oracle Corporation, ... , env.MAVEN_OPTS=-Xmx256M, ...

Обновить
В конце концов, выполненный mvn Команда - это скрипт ОС. Посмотрев на это в Windows, я обнаружил возможность использования MAVEN_BATCH_ECHO опция, которая, если включена (значение установлено в on), будет повторять любую команду, выполняемую сценарием, а также вызов java команда, где вы можете увидеть, если ваши параметры (MAVEN_OPTS) правильно подобраны вместе с полным списком переданных ему параметров.

Вот исполнение, которое я протестировал на Windows:

set MAVEN_BATCH_ECHO=on
set MAVEN_OPTS=-Xmx256M
mvn compile > output.txt  

Обратите внимание output.txt будет содержать довольно много текста, обеспечивая вывод сборки и дополнительные echo с казнями. Как часть этого, это обеспечило:

>"path_to_\jdk1.7\bin\java.exe" -Xmx256M -classpath "path_to\apache-maven-3.1.1\bin\..\boot\plexus-classworlds-2.5.1.jar" "-Dclassworlds.conf=path_to\apache-maven-3.1.1\bin\..\bin\m2.conf" "-Dmaven.home=path_to\apache-maven-3.1.1\bin\.." org.codehaus.plexus.classworlds.launcher.Launcher compile 

Как видите, -Xmx256M Опция выбрана правильно. Если сценарий maven для других ОС не предоставляет эту опцию, вы можете просто добавить его в сценарий (простой echo перед java Выполнение, показывающее команду, также будет достаточно).
Вы можете найти скрипт maven в папке установки maven, под bin вложенная папка.


Update2
Кроме того, поскольку Maven - это инструмент Java в конце концов, и, как вы можете видеть из его скрипта, он вызывает команду java, вы можете увидеть все доступные опции, как предлагается в этом SO-ответе, слегка изменив скрипт Maven и используя jinfo команда, которая действительно должна дать вам ответ согласно этому другому SO-ответу.

Может быть, это поможет запустить Maven с подробным выводом отладки (думаю, -debug?). В противном случае просто сделайте ps aux | grep java и проверьте аргументы процесса (при условии *nix).

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