Gradle 任务未按要求 运行(编译前)
Gradle task not running as demanded (before compiling)
简介
该项目使用 Kotlin 并使用 Gradle 构建。我正在尝试使用一些构建信息生成基本数据 class,现在假设我需要在 运行ning.
之前每次都[重新]生成它
这是我现在的 Gradle 任务:
def generatedDir = "$buildDir/generated"
// noinspection GroovyAssignabilityCheck
task generateBuildInfo {
inputs.property "version", rootProject.version.toString()
inputs.property "name", rootProject.name.toString()
outputs.dir generatedDir
outputs.upToDateWhen { false }
doFirst {
def buildInfoFile = file("$generatedDir/BuildInfo.kt")
buildInfoFile.parentFile.mkdirs()
buildInfoFile.text = """
internal data class BuildInfo(
val version: String = "${project.version.toString() ?: "unspecified"}",
val name: String = "${project.name.toString() ?: "unspecified"}"
)
""".replace(" ", "").trim()
}
}
为了能够从 IntelliJ IDEA 解决这个问题,我将我的新文件夹添加到项目源中,显然连接了依赖项,如下所示:
sourceSets.main.kotlin.srcDirs += generatedDir
project.afterEvaluate {
compileJava.dependsOn generateBuildInfo
compileKotlin.dependsOn generateBuildInfo
}
这一切都在一个单独的文件中完成(以避免污染我的主要脚本)。由于这个组织,在应用插件后,我只在我的主脚本中包含生成器,如下所示:
apply from: "gradle/scripts/build-info-generator.gradle"
问题
看起来生成器代码只执行了一次,在 运行ning assemble
之后我第一次 运行 clean
在这个模块上。这不是我想要的,因为当我更改某些项目属性(如 version
)时,源代码不会更新...就像 compileJava
/compileKotlin
和我的自定义任务不执行。
它们不会在执行时出现在构建日志中。
每次我想 运行 我的模块启动器时,有什么方法可以 运行 这个任务吗?当然,我可以做一些智能文件比较,看看是否需要生成,但现在我只想每次都完成。我错过了什么吗?
IDEA 有自己的构建系统,独立于 Gradle。
您可以将其配置为 运行 在其自己的构建任务之前执行 Gradle 任务。
您还可以将其配置为将所有 build/run 任务委派给 Gradle。但这不是默认设置。
简介
该项目使用 Kotlin 并使用 Gradle 构建。我正在尝试使用一些构建信息生成基本数据 class,现在假设我需要在 运行ning.
之前每次都[重新]生成它这是我现在的 Gradle 任务:
def generatedDir = "$buildDir/generated"
// noinspection GroovyAssignabilityCheck
task generateBuildInfo {
inputs.property "version", rootProject.version.toString()
inputs.property "name", rootProject.name.toString()
outputs.dir generatedDir
outputs.upToDateWhen { false }
doFirst {
def buildInfoFile = file("$generatedDir/BuildInfo.kt")
buildInfoFile.parentFile.mkdirs()
buildInfoFile.text = """
internal data class BuildInfo(
val version: String = "${project.version.toString() ?: "unspecified"}",
val name: String = "${project.name.toString() ?: "unspecified"}"
)
""".replace(" ", "").trim()
}
}
为了能够从 IntelliJ IDEA 解决这个问题,我将我的新文件夹添加到项目源中,显然连接了依赖项,如下所示:
sourceSets.main.kotlin.srcDirs += generatedDir
project.afterEvaluate {
compileJava.dependsOn generateBuildInfo
compileKotlin.dependsOn generateBuildInfo
}
这一切都在一个单独的文件中完成(以避免污染我的主要脚本)。由于这个组织,在应用插件后,我只在我的主脚本中包含生成器,如下所示:
apply from: "gradle/scripts/build-info-generator.gradle"
问题
看起来生成器代码只执行了一次,在 运行ning assemble
之后我第一次 运行 clean
在这个模块上。这不是我想要的,因为当我更改某些项目属性(如 version
)时,源代码不会更新...就像 compileJava
/compileKotlin
和我的自定义任务不执行。
它们不会在执行时出现在构建日志中。
每次我想 运行 我的模块启动器时,有什么方法可以 运行 这个任务吗?当然,我可以做一些智能文件比较,看看是否需要生成,但现在我只想每次都完成。我错过了什么吗?
IDEA 有自己的构建系统,独立于 Gradle。
您可以将其配置为 运行 在其自己的构建任务之前执行 Gradle 任务。
您还可以将其配置为将所有 build/run 任务委派给 Gradle。但这不是默认设置。