gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:04 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com