【问题标题】:java compiler annotation processor option not passed correctlyjava编译器注释处理器选项未正确传递
【发布时间】:2019-09-08 08:34:51
【问题描述】:

我正在编写一个 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 选项不会出现在注释处理器中。

【问题讨论】:

  • 你在AnnotationProcessorprocessingEnv.getOptions().get("core.versionId") 中查找了吗?
  • 这是相关行:String artifactVersion = processingEnv.getOptions().get("core.versionId");
  • 你看看Environment中是否有任何选项?
  • 选项映射似乎是空的。
  • 看了 maven-compiler-plugin 页面后,也许你必须使用forceJavacCompilerUse?见:maven.apache.org/plugins/maven-compiler-plugin/…

标签: java maven annotation-processor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-03-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多