未正确传递 java 编译器注释处理器选项

标签 java maven annotation-processor

我正在编写一个 Java 注释处理器来从代码体中的注释中收集元数据。我希望输出文件以 maven 项目版本开头。看着 javac documentation for Oracle java 8 ,看来我应该能够使用符号 -A key=value 将项目版本作为选项传递给注释处理器。因此,我配置了 maven-compiler-plugin 以将 core.versionId 选项设置为项目版本,如下所示:

<configuration>
  <compilerArgs>
    <arg>-A core.versionId=${project.version}</arg>
  </compilerArgs>
</configuration>

但是,当我编译时,出现以下错误:

Fatal error compiling: key in annotation processor option '-A core.versionId=1.7.0-SNAPSHOT' is not a dot-separated sequence of identifiers

似乎正确插入了 project.version,但编译器未能如广告所示处理 -A 选项。我一定是遗漏了什么,但我看不到它是什么,而且我找不到任何关于这个问题的提及。非常感谢任何帮助。

更新:如果我删除空格,错误就会消失,使 arg 成为 -Acore.versionId=${project.version}, 但在这种情况下,core.versionId 选项不会出现在注释处理器中。

最佳答案

事实证明,原始问题中遗漏了一条关键信息。正在编译的模块还需要使用 AspectJ 编织,这会重新运行编译器。注释处理器确实在编译步骤中运行并产生了正确的输出,但在 AspectJ 编织步骤中被第二次运行的注释处理器立即覆盖。在 aspectj-maven-plugin 子句中添加一些配置解决了问题:

<configuration>
  <proc>none</proc>
</configuration>

关于未正确传递 java 编译器注释处理器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738683/

相关文章:

Java 测试字符串处理

docker - 如何在Jenkins中修复Maven权限问题

java - 外部化属性工作但不覆盖内部属性中的现有默认值

maven - Kotlin-Kapt 注解处理器无法与 Maven 一起使用

java - 获取 javax.annotation.processing.Processor 中 VariableElement 的封闭类名

java - IntelliJ GUI 表单未出现

java - 根据java文件生成Avro文件

java - 在 JSF 2.0 中使用自定义 java 注释进行托管 Bean 方法授权

java - Sonatype nexus 下载的 jars 位置

java - 编译测试库不编译接口(interface)的静态方法(Java 8)