Maven указывает местоположение файла настроек через MAVEN_OPTS - PullRequest
0 голосов
/ 31 декабря 2018

Мне нужно использовать maven с файлом настроек в определенном месте, обычно вы можете задать MAVEN_OPTS переменную env, но они будут переданы в JVM, поэтому следующее выдаст:

$ MAVEN_OPTS="-s /settings.xml"
$ mvn clean
Unrecognized option: -s
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Я искалмного, но нашел два ключа, org.apache.maven.user-settings и org.apache.maven.global-settings, что объясняется здесь , но казалось, что он работает только с Maven 2.Псевдоним от mvn до mvn -s /settings.xml, вероятно, будет работать, но мне это не нравится.

1 Ответ

0 голосов
/ 01 января 2019

Из сценария оболочки mvn:

# -----------------------------------------------------------------------------
# Apache Maven Startup Script
#
# Environment Variable Prerequisites
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
# -----------------------------------------------------------------------------

, поэтому MAVEN_OPTS содержит аргументы JVM, а не Maven (что согласуется с сообщением об ошибке, указывающим, что JVM не любит ваши аргументы).

Фактический вызов

exec "$JAVACMD" \
  $MAVEN_OPTS \
  $MAVEN_DEBUG_OPTS \
  -classpath "${CLASSWORLDS_JAR}" \
  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
  "-Dmaven.home=${MAVEN_HOME}" \
  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${CLASSWORLDS_LAUNCHER} "$@"

, поэтому его некуда положить.Поэтому я бы предложил вам написать свой?Скрипт mvn, который в свою очередь вызывает настоящую команду maven с аргументами, которые вам нравятся (по моему опыту, скрипты более надежны, чем псевдонимы).Кроме того, недавно я обнаружил, что версии Java более поздней, чем 8, имеют ... интересные проблемы ... поэтому мне действительно нужно иметь команды mvn8, mvn11 (и, возможно, больше).

ЕщеПодход, который я только недавно начал использовать, - это оболочка Maven (https://github.com/takari/maven-wrapper), где в ваш проект помещается команда ./mvnw, которая затем загружает Maven, когда это необходимо. Это очень полезно. Для начала используйте

mvn -N io.takari:maven:wrapper

, после чего ./mvnw должен использоваться непосредственно вместо mvn. Интересная часть здесь заключается в том, что сгенерированная команда Maven выглядит так:

exec "$JAVACMD" \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

, а MAVEN_CONFIG не установлен ранее в сценарии.Так что для mvnw вы можете установить MAVEN_CONFIG для вашей строки "-s /settings.xml".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...