it-roy-ru.com

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

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

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

Правка: я считаю, что это отличается от этот вопрос так как я не хочу видеть значение переменной среды. Я скорее хочу посмотреть, какие настройки на самом деле используются Maven, будь то из env var, settings.xml или других средств.

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

7
Vituel

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

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

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

Настройка плагина: через Свойства (и профили)
Вы можете объединить две вышеупомянутые опции (в случае общих опций 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

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

Global/Env configuration: MAVEN_OPTS
Maven общеизвестная переменная environment для установки глобальных параметров выполнения, однако применяется ко всем сборкам 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 будет содержать довольно много текста, обеспечивая вывод сборки и дополнительные исполнения echos. Как часть этого, это обеспечило:

>"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 .

11
A_Di-Matteo

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

0
C-Otto