Javac 不运行注释处理器

Rol*_* W. 6 java code-generation javac maven

问题

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

我尝试过的

  • 已验证确实没有来源target/generated-sources/annotations不存在
  • 确保 javac 未被调用-proc:none它不是
  • 运行mvn clean dependency:unpack-dependencies -Dmdep.useSubDirectoryPerArtifact=true以确保预期的依赖项位于类路径上并且它们包含有效的META-INF/services/javax.annotation.processing.Processor条目(是的,有多个,包括org.immutables.processor.ProxyProcessor
  • 按照如何确保 javac 正在使用注释处理器并在未使用注释处理器时进行故障排除中的以下步骤进行操作:
    1. 从 Maven 调试日志中获取 javac 选项
    2. 删除-nowarn选项并添加-verbose -XprintRounds -XprintProcessorInfo -Xlint -J-verbose. 注意:我还必须添加主类的相对路径,否则 javac 会抱怨没有源。
    3. 验证处理器类是否已加载(不存在
    4. 查找至少一个处理轮日志(不存在
    5. 确保注释存在于循环日志列表中(无循环日志
  • -proc:only向 javac 命令添加了选项
  • 还添加-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

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

问题

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

Dan*_*iel 0

据我所知,maven 会为生成的源生成一个标记文件或标记目录(以点开头)。不过这也是很久以前的事了……