java - Maven 通过 MAVEN_OPTS 指定设置文件位置

标签 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-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 版本有……有趣的问题……所以我真的需要 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”字符串。

关于java - Maven 通过 MAVEN_OPTS 指定设置文件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53990100/

相关文章:

java - 带有无效XML的Spring请求正文问题

java - 无需模拟器即可访问 SQLite DB?

java - 在 wxi 和 wxs 中使用具有相同 Id 的 WIX 功能元素

maven - 使用 cxf jar 打包 Camel 项目

java - 在maven插件项目外设置一个参数值

java - Eclipse 何时将资源复制到输出文件夹?

java - 在Java中将子类添加到父类(super class)数组中

java - Spring应用程序未运行

maven - 如何从 Maven 项目中引用公共(public) GitHub 包

java - 通过命令提示符运行 maven