当前位置: 首页 > 知识库问答 >
问题:

如何处理空间在参数MAVEN_OPTS从命令行?

魏煜祺
2023-03-14

当有空格,尤其是javaagent参数时,通过MAVEN_OPTS将参数传递给我的mvn命令会遇到一些问题。我也遵循了这个建议,在分号后面加上了双引号,但运气不好。

我使用的命令是:

$ export MAVEN_OPTS='-javaagent:"/Users/teras/Library/Application Support/CrossMobile/Plugins/cmxray.jar"'
$ echo $MAVEN_OPTS
-javaagent:"/Users/teras/Library/Application Support/CrossMobile/Plugins/cmxray.jar"
$ mvn -P desktop,run install -B -e
Error opening zip file or JAR manifest missing : "/Users/teras/Library/Application
Error occurred during initialization of VM
agent library failed to init: instrument

不幸的是,这似乎不起作用。如果有帮助的话,我在OSX上使用bash。

知道我错过了什么吗?

共有1个答案

墨承泽
2023-03-14

恐怕你不能轻易做到。如果查看mvn脚本,您可以看到它没有将$MAVEN\u OPTS括在引号中。

所以,除非有我不知道的把戏,否则就没有办法逃离这个空间。

您可以通过编辑您的mvn脚本在本地修复此问题。如果您使用自制安装Maven,您可以在/usr/local/Cellar/maven/中找到它

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

并在变量周围加上引号,如下所示:

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

我不确定这是一个Maven bug,还是故意这么做。看起来这个问题已经被报道了,但似乎有一些来自maven团队的阻力。

更新

在阅读了上述问题的评论后,我发现这一点解释了为什么这可能不是一个好的解决方案:

如果在这里使用时引用$MAVEN_OPTS,java可执行文件会将其视为一个参数,而不是多个参数,因此如果使用MAVEN_OPTS=“-Xmx256m-Dparam=”with space\”,java将理解Xmx256m-Dparam=“with space”。。。

如果不引用它,那么每个空格分隔的令牌(即使在声明MAVEN_OPTS时转义了它)都将被视为一个单独的参数,因此-Dparam=“with space”将被理解为试图使用-Dparam=“with system property启动space”主类。。。

 类似资料:
  • 问题内容: 如果我期望像001或999这样的东西(这次让我们将期望值限制为001 … 999范围),并且传递了其他一些参数,并且想忽略任何意外内容,那么这将是处理命令行参数的简单表达式? 我知道,例如,如果我需要确定是否在参数之间传递了“ debug”,它将像这样: 如何确定是否通过了009或575? 所有这些都是预期的电话: 在这一点上,我不在乎这样的电话: …第一个-由于存在多个“数字”参数;

  • 问题内容: Python程序员可以通过哪些方式做到这一点? 问题答案: 标准库中的规范解决方案是: 这是一个例子: 任意顺序的多个选项。 短期和长期选择。 默认值。 生成使用帮助消息。

  • 10.6. 处理命令行参数 Python 完备支持创建在命令行运行的程序,并且连同命令行参数和短长样式来指定各种选项。这些并非是 XML 特定的,但是这样的脚本可以充分使用命令行处理,看来是时候提一下它了。 如果不理解命令行参数如何暴露给你的 Python 程序,讨论命令行处理是很困难的,所以让我们先写个简单那的程序来看一下。 例 10.20. sys.argv 介绍 如果您还没有下载本书附带的例

  • 问题内容: 当我编写一个解析命令行参数的Spring命令行应用程序时,如何将它们传递给Spring?我是否希望结构化main()以便它首先解析命令行args,然后解析其Spring?即使这样,它将如何将持有解析的args的对象传递给Spring? 问题答案: 我可以想到两种可能性。 1)设置静态参考。(尽管通常不赞成使用静态变量,但在这种情况下可以,因为只能有1个命令行调用)。 然后,您可以通过以

  • XPath如何处理XML命名空间? 如果我使用 为了解析下面的XML文档,我得到了0个节点。 但是,我没有在XPath中指定名称空间(即不是路径的每个标记的前缀)。如果我没有明确告诉XPath,它怎么知道我想要哪个?我认为在这种情况下(因为只有一个名称空间),XPath可以完全忽略。但如果有多个名称空间,事情可能会变得糟糕。

  • 在你能处理本书的第一部分之前,你需要完成一些简单的黑魔法,教你如何使用 Python 中的命令行参数。 传统上我们称这种黑魔法为“spike”。该术语来自于一个小型测试项目,涵盖了更大的流程或项目的所有元素。这个小型测试黑魔法“spike”通过一切手段,来确保你可以使用它。spike 的目的是,通过排练来了解如何使用一些新的库或工具,然后真正在你的项目中使用它。 这也是第一个具有“挑战性”的练习。