Найти параметры 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).