Maven通过MAVEN_OPTS

时间:2018-12-31 17:50:25

标签: java maven

我需要在特定位置将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-settingsorg.apache.maven.global-settingshere对此进行了解释,但是看来它仅适用于Maven 2。将mvn别名为mvn -s /settings.xml可能会起作用,但我不喜欢它。

1 个答案:

答案 0 :(得分:2)

通过mvn shell脚本:

# -----------------------------------------------------------------------------
# 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,这有...有趣的问题...因此,无论如何,我确实需要使用mvn8mvn11(也许还有更多)命令。

我最近才开始使用的另一种方法是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”字符串。