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" 并且想要重新生成它们。你有几个选择。
- 在 'compileJava' 任务的
doLast { }
块内进行检测。
- 将源代码复制到中间目录,然后对其进行检测。然后您需要更新 'jar' 任务以包含此代码。
在我的 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" 并且想要重新生成它们。你有几个选择。
- 在 'compileJava' 任务的
doLast { }
块内进行检测。 - 将源代码复制到中间目录,然后对其进行检测。然后您需要更新 'jar' 任务以包含此代码。