Maven:如何使用maven-compiler-plugin指定Javac插件参数?

时间:2018-02-09 23:25:56

标签: java maven javac javac-compiler-plugin

Javac提供以下非标准选项(来自“javac -X”命令​​行帮助):

-Xplugin:"name args"       Name and optional arguments for a plug-in to be run

但是,Maven没有处理这种格式。例如,以下内容不起作用:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <compilerArgs>
      <arg>-Xplugin:"Manifold static"</arg>
    </compilerArgs>
  </configuration>
</plugin>

我尝试了几种不同的版本并尝试用'='替换空格,仍然没有bueno。有解决方法吗?

注意我正在使用带有Java 8的Manifold javac插件。重现很简单..创建一个依赖于多种jar的pom:

<dependency>
  <groupId>systems.manifold</groupId>
  <artifactId>manifold-all</artifactId>
  <version>0.9-alpha</version>
</dependency>

您并不需要任何来源,这只是为了证明Maven不会接受-Xplugin:"Manifold static" javac参数。

另请注意,Java 9似乎已将-Xplugin的格式更改为不再需要引号。请参阅此处的Java 9 docs

1 个答案:

答案 0 :(得分:2)

根据这个讨论:MCOMPILER-178和这个补丁:pull request,由于空格似乎不是XML名称中允许的字符,我怀疑你有只需删除所有双引号,并保留所有空格。

这里:

myOption=foo"bar"baz

bash中的字符串连接(或者您正在使用的任何shell)。它存储字符串&#34; foobarbaz&#34;在变量myOption中。如果你在bash中的一个选项中使用双引号,那么它只是意味着:&#34; bash,请将引号之间的整个事物视为单个参数,不要将其拆分为数组字符串参数&#34;。例如,如果您运行以下 bash脚本:

#!/bin/bash

echo $1
echo $2
echo $3

带有这些论点:

$ ./testArgs.sh hello -World:"blah blah blah" foobar

你会得到这个输出:

hello
-World:blah blah blah
foobar

-World:blah blah blah部分是单个字符串,不保留引号。

Maven不是bash。 POM是一个XML文件,它有标签,有些标签用文字填充。 XML并不关心字符串连接或参数解析的bash语法。如果我正确理解了上述讨论,他们会将xml-tags的内容直接传递给编译器,而不做任何修改。

因此,我最好的猜测就是删掉双引号:

<arg>-Xplugin:MyPlugin myArg</arg>

如果这没有帮助,那么我完全误解了上面讨论的讨论,或者你使用的是不同作用的maven版本。