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。
答案 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版本。