我需要在特定位置将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
,here对此进行了解释,但是看来它仅适用于Maven 2。将mvn
别名为mvn -s /settings.xml
可能会起作用,但我不喜欢它。
答案 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,这有...有趣的问题...因此,无论如何,我确实需要使用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”字符串。