Gradle 编译 java 未更改但 类 由 aopc 修改的源

Gradle compiling java sources when they have not changed but classes modified by aopc

在我的 gradle 项目中,我将我的 java 源编译为生成的 classes,然后 运行 一个自定义任务来修改 classed 使用JBoss aopc 将 classes 用于横切功能(方面),例如性能监控等

由于某些奇怪的原因,在后续的 assemble 任务中,这会导致 java 源被编译,即使它们的 none 输入 java 源文件具有变了。更改的是一些源文件的 .class 文件,这些源文件针对方面进行了检测。

gradle 调试输出说:

Executing task ':project1:compilePlafSrcJava' (up-to-date check took 1.998 secs) due to:
  Output file /pkg1/Class1.class has changed.
  Output file /pkg1/Class2.class has changed.
  Output file /pkg1/Class3.class has changed.
All input files are considered out-of-date for incremental task ':project1:compilePlafSrcJava'.

请注意,3 classes 是由 javac 生成后由 jboss aopc 检测的。

似乎如果 classes 上的时间戳晚于相应的 .java 文件上的时间戳,则不应进行重新编译。我错过了什么?

这里的问题是您正在修改编译任务的输出。 Gradle 检测到它的输出已经 "tampered with" 并且想要重新生成它们。你有几个选择。

  1. 在 'compileJava' 任务的 doLast { } 块内进行检测。
  2. 将源代码复制到中间目录,然后对其进行检测。然后您需要更新 'jar' 任务以包含此代码。