maven-compiler-plugin参数字符串超过OS X终端限制

时间:2013-07-26 08:47:06

标签: java macos bash maven javac

我正在更新我正在处理的项目的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运行了这个文本块,发现问题基本上归结为参数字符串(即命令行选项)对于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手动运行的这个庞大的文本块吗? (任何其他错误都应该被屏蔽,并显示在正确的错误消息中)。我们尝试了几种设置,没有运气。

2)是否有一个修复,可以a)阻止Maven生成这个大小的参数字符串(某些显然从版本2.3.2到3.1),或b)增加MAX_ARG在OS X上?

2 个答案:

答案 0 :(得分:0)

我以前经常这样做,我养成了将M2_REPO移到更接近root的地方的习惯,比如/ java / m2 / r添加

  <localRepository>/java/m2/r</localRepository>

到我的~/.m2/settings.xml

答案 1 :(得分:0)

删除整个~/.m2/repository终于为我工作了。