如何通过 Maven 将“-J”选项传递给 javac?

Posted

技术标签:

【中文标题】如何通过 Maven 将“-J”选项传递给 javac?【英文标题】:How to pass "-J" options to javac through Maven? 【发布时间】:2013-02-01 23:25:05 【问题描述】:

我有一个使用 Maven 构建的 Java 项目。我想向“javac”命令行添加选项 - 特别是,我想传递一些“-J”选项。

所以通常我会这样做:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <compilerArgument>-J-Xdebug</compilerArgument>
        <compilerArgument>-J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</compilerArgument>
    </configuration>
</plugin>

但是,当我尝试这个时,我得到了表单错误:

[ERROR] Failure executing javac,  but could not parse the error:
javac: invalid flag: -J-Xdebug
Usage: javac <options> <source files>
use -help for a list of possible options

经过仔细调查,maven-compiler-plugin 似乎将所有编译器参数写入选项文件,并像“javac @optionfile”一样调用 javac。根据http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/javac.html的javac官方文档:

@argfiles 列出选项和源文件的一个或多个文件。这些文件中不允许使用 -J 选项。

所以看起来 maven-compiler-plugin 中的选项不起作用 - 它想使用 arg 文件,arg 文件不能包含我想要的选项。

我还看到了一些使用地图的建议 - 但是当我尝试时,结果相似。

还有其他选择吗?

【问题讨论】:

看起来你遇到了一个已知问题 - jira.codehaus.org/browse/MCOMPILER-129 【参考方案1】:

编译器插件允许你specify the location of the jdk,所以你可以使用这样的东西:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <configuration>
      <verbose>true</verbose>
      <fork>true</fork>
      <executable><!-- path-to-javac-invoking-script --></executable>
      <compilerVersion>1.3</compilerVersion>
    </configuration>
  </plugin>

并为其提供脚本/bat 文件的路径,该文件将所有参数连同您的额外参数一起传递给真正的 javac?

编辑 - the original issue 已在编译器插件 2.4+ 中修复,现在应该可以正常工作,无需我的解决方法

【讨论】:

好吧,我可以确认它可以工作......但这绝对是一种解决方法,但是没有在上游修复错误并等待新版本的插件,这将工作:) @RichardDowner - 你没有要求漂亮 ;-)

以上是关于如何通过 Maven 将“-J”选项传递给 javac?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Java 使用 Selenium 将功能和选项传递给 Firefoxdriver

如何将本地 Maven m2 作为属性传递给 Gradle?

如何将 withCredentials 选项传递给 Request?

如何将额外的自定义 ./configure autotools 选项传递给 Buildroot 包?

如何将多个选项传递给 Firefox 中引导轮播的可选选项对象?

如何将 crud 表中的行值传递给自定义提交按钮