gpt4 book ai didi

java - 如何使用注释处理器配置 Gradle 的增量构建

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:23 34 4
gpt4 key购买 nike

我想在构建过程中使用 QueryDSL 注释处理器。我怎样才能摆脱每次更改任何类时不必要的注释处理器编译和运行?我希望 QueryDSL 仅在某些相关类发生更改时生成 Q-* 类。

这个始终运行的注解处理器对我们的构建过程时间有负面影响,如果注解处理器必须运行,增量构建似乎无法正常工作。

谢谢。

最佳答案

Gradle 无法知道注解处理器使用哪些文件作为他们的输入,因此每当监视目录中的某些内容发生更改 (src) 时,它都必须触发完全重新编译。

但是,您可以轻松地告诉 Gradle 哪些文件应该只触发注释处理。更改为其他文件不会触发注释处理器的使用并且 gradle 可以使用它的所有功能(例如增量构建)。

我还添加了“强制”任务 buildWithAP 调用注释处理器,而不考虑提示(启发式)函数结果。

我的解决方案:

ext.isTask = { name -> return project.gradle.startParameter.taskNames.contains(name) }

/**
* Heuristic function allowing to build process guess if annotation processor run is necessary
* Annotation processors will not be called during build task if this function returns FALSE
*/
ext.isApInvalidated = { -> return hasAnyFileRelatedToApChanged() }

dependencies {
if (isTask("buildWithAP") || isApInvalidated()) {
println "Going to run annotation processors ..."
apt "com.querydsl:querydsl-apt:$queryDslVersion:jpa"
...
} else {
// just add generated classes to the classpath
// must be in else branch or multiple AP calls will collide!
sourceSets.main.java.srcDirs += projectDir.absolutePath + "/build/generated/apt"
}

task buildWithAP (dependsOn: build) {}

您可以使用任何您想要的注释处理器,例如您自己的,而不仅仅是 QueryDSL。

希望我的观点很清楚。

关于java - 如何使用注释处理器配置 Gradle 的增量构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47289457/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com