我正在更新我正在处理的项目的 POM 中不同依赖项和插件的版本。其中一项更新是将 maven-compiler-plugin 从版本 2.3.2 升级到 3.1。这样做之后,项目中的某些组件现在不再能够成功构建。给出的唯一错误是:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project project-name: Compilation failure -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project project-name: Compilation failure
当使用 -X 开关运行 maven 时,我们还看到日志中有一大块文本。我们成功地通过 javac 运行了这个文本 block ,发现问题基本上归结为参数字符串(即命令行选项)太长,OS X 中的 Bash 无法处理。
-bash: /usr/bin/javac: Argument list too long
我也尝试过逐渐增加版本号,但问题从 maven-compiler-plugin 版本 3.0 开始。
这是在 POM 中导入插件的方式:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<verbose>true</verbose>
<encoding>UTF-8</encoding>
<source>1.6</source>
<target>1.6</target>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
</configuration>
</plugin>
命令行选项中显然有超过 350k 个字符,OS X 终端无法处理这些字符。 OS X 的 ARG_MAX 是 32 kb,而 Linux Ubuntu 似乎支持 256 kb。 Linux Ubuntu 可以顺利地用新版本编译程序,所以对我来说这基本上证实了我们的怀疑。
因此,我的问题归结为两件事:
1) 我们能否让 Maven 给我们一个正确的错误消息,而不是需要通过 javac 手动运行的这个巨大的文本 block ? (任何其他错误都会按应有的方式进行处理,并显示在正确的错误消息中)。我们尝试了几种设置,但没有成功。
2) 是否有一个修复可以 a) 阻止 Maven 生成这种大小的参数字符串(something 显然是从版本 2.3.2 到 3.1 发生的),或者 b) 增加 MAX_ARG在 OS X 上?
最佳答案
我以前总是得到这些,我养成了将 M2_REPO 移动到更接近 root 的地方的习惯,比如/java/m2/r 通过添加
<localRepository>/java/m2/r</localRepository>
关于java - maven-compiler-plugin 参数字符串超出 OS X 终端限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876897/