Javac没有运行注释处理器

时间:2018-01-26 13:24:58

标签: java maven code-generation javac

问题

我正在重新审视一个我至少一年未触及过的maven项目。我很确定它在我离开它时成功编译(target目录中仍有一个工作jar),但现在编译失败,因为生成的类丢失了。

我尝试了什么

  • 已确认target/generated-sources/annotations确实没有来源(不存在
  • 确保javac未被-proc:none调用(它不是
  • Ran mvn clean dependency:unpack-dependencies -Dmdep.useSubDirectoryPerArtifact=true以确保预期的依赖关系位于类路径上,并且它们包含有效的META-INF/services/javax.annotation.processing.Processor条目(有多个,包括org.immutables.processor.ProxyProcessor
  • How to make sure javac is using an annotation processor and troubleshoot when it is not开始执行以下步骤:
    1. 从maven调试日志中获取javac选项
    2. 删除-nowarn选项并添加-verbose -XprintRounds -XprintProcessorInfo -Xlint -J-verbose。注意:我还必须添加主类的相对路径,否则javac会抱怨没有来源。
    3. 验证处理器类是否已加载(不存在
    4. 查找至少一个处理回合日志( none present
    5. 确保在圆形日志列表中显示注释(无圆形日志
  • 为javac命令添加了-proc:only选项
  • 还将-processor org.immutables.processor.ProxyProcessor添加到javac命令(处理器现已加载,但仍未打印任何轮次且未生成任何类别)
  • 将处理器选项更改为-processor org.immutables.processor.ProxyProcessorXXX以查看它是否会产生影响(确实,现在会打印一条警告,指出已proc:only请求处理,但没有找到处理器)
  • 如果我没有使用-processor选项,检查是否出现了这个警告,这应该让javac从类路径检测处理器(它没有显示警告,表明它已检测到处理器,但日志没有显示任何迹象)
  • 从JDK1.8切换到JDK9(使用jenv)
  • 后尝试上述操作
  • 安装Zulu 1.7并在切换到它之后尝试使用(使用jenv)

可能的因素

  • 我完全安装了macOS
  • 之前我跑过macOS Sierra,目前是High Sierra
  • 在我没有安装JDK9之前
  • 很久以前我转而使用Gradle,所以我可能忘记了关于maven的重要细节

命令选项

这是我目前正在使用的javac命令:

javac -d ./target/classes -classpath ./target/classes:$HOME/.m2/repository/com/google/dagger/dagger/2.4/dagger-2.4.jar:$HOME/.m2/repository/com/google/dagger/dagger-compiler/2.4/dagger-compiler-2.4.jar:$HOME/.m2/repository/com/google/auto/factory/auto-factory/1.0-beta3/auto-factory-1.0-beta3.jar:$HOME/.m2/repository/org/immutables/builder/2.3.9/builder-2.3.9.jar:$HOME/.m2/repository/org/immutables/value/2.3.9/value-2.3.9.jar:<LONG LIST OF DIRECT AND TRANSITIVE DEPENDENCIES HERE> -sourcepath ./src/main/java: -s ./target/generated-sources/annotations -verbose -XprintRounds -XprintProcessorInfo -Xlint -J-verbose -processor org.immutables.processor.ProxyProcessor -proc:only ./src/main/java/com/mycompany/myproject/Main.java

注意:为了更好的可读性,我将每个参数放在一个新行上,用$HOME/./替换绝对路径,我省略了大多数依赖项。

问题

我在这里缺少什么?任何建议或指示将不胜感激。

1 个答案:

答案 0 :(得分:0)

据我所知,maven为生成的源生成标记文件或标记目录(以点开头)。但它也是很久以前......