Gradle编译java源代码,但这些源代码未更改,但类已被aopc修改

Gradle编译java源代码,但这些源代码未更改,但类已被aopc修改,gradle,aop,jboss5.x,Gradle,Aop,Jboss5.x,在我的gradle项目中,我将java源代码编译成生成的类,然后运行一个自定义任务,使用JBoss aopc修改类,以便为性能监视等横切特性(方面)插入类 出于某种奇怪的原因,在后续的汇编任务中,这会导致编译java源代码,即使它们的输入java源文件都没有更改。已更改的是为某些方面插入指令的源文件的.class文件 gradle debug out说: Executing task ':project1:compilePlafSrcJava' (up-to-date check took 1.

在我的gradle项目中,我将java源代码编译成生成的类,然后运行一个自定义任务,使用JBoss aopc修改类,以便为性能监视等横切特性(方面)插入类

出于某种奇怪的原因,在后续的汇编任务中,这会导致编译java源代码,即使它们的输入java源文件都没有更改。已更改的是为某些方面插入指令的源文件的.class文件

gradle debug out说:

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个类是jboss aopc在javac生成后插入指令的类


如果类上的时间戳晚于相应的.java文件上的时间戳,则不应进行重新编译。我遗漏了什么?

这里的问题是您正在修改编译任务的输出。Gradle检测到其输出被“篡改”,并希望重新生成它们。你有两个选择

  • 在“compileJava”任务的
    doLast{}
    块中执行指令插入
  • 将源复制到一个中间目录,然后插入它。然后需要更新“jar”任务以包含此代码
  • 因为doLast{}(选项1)更容易实现,所以我就是这么做的,它就像一个符咒。谢谢你。你是个救生员!!