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

标签 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>

我尝试了几种不同的变体,并尝试用“=”替换空格,但仍然没有结果。有解决方法吗?

请注意,我使用的是 Manifold带有 Java 8 的 javac 插件。复制很简单。创建一个依赖于 manifold-all 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对此。

最佳答案

鉴于此讨论:MCOMPILER-178这个补丁:pull request ,并且由于空格似乎不是 XML 名称中允许的字符,我怀疑您必须删除所有双引号,并保留所有空格。

这里是:

myOption=foo"bar"baz

bash(或您使用的任何 shell)中的字符串连接。它将字符串“foobarbaz”存储在变量 myOption 中。如果你在 bash 的选项中使用双引号,那么它只是意味着:“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 标签的内容直接传递给了编译器,没有任何修改。

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

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

如果这没有帮助,那么我完全误解了上面链接的讨论,或者您可能使用的是工作方式不同的 Maven 版本。

关于java - Maven:如何使用 maven-compiler-plugin 指定 Javac 插件参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48715546/

相关文章:

java - 学习如何正确阅读Javadoc

java - 如何在不默认使用 Maven 的情况下在 Netbeans 中创建 Java 项目?

java - 借助小程序运行网页中的普通Jar文件

java - 如何使用 Java 代码添加 DB2 库来调用 AS400 PGM

java - Maven 站点插件问题

java - 如何在 Linux 中从下载的源代码创建 Java 包

Java编译困惑: why does this code compile?

javac Jenkins Ant : build errors relating to dependent import. jars

java - 如何在android中创建多语言应用程序

Maven 版本控制最佳实践