我需要在特定位置使用带有设置文件的 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
可能会起作用,但我不喜欢它。
最佳答案
来自 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 命令(根据我的经验,脚本比别名更强大)。另外,我最近发现自己高于 8 的 Java 版本有……有趣的问题……所以我真的需要 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”字符串。
关于java - Maven 通过 MAVEN_OPTS 指定设置文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53990100/