该项目位于科特林中,并使用 Gradle 构建。我正在尝试使用一些构建信息生成基本数据类,现在让我们说,我需要每次运行前都重新生成它。
这是我现在拥有的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"
当我在此模块上首次运行assemble
时,运行clean
后,似乎生成器代码仅执行一次。这不是我想要的,因为当我更改某些项目属性(如version
)时,源不会得到更新……就好像compileJava
/ compileKotlin
和我的自定义任务未执行。
它们不在执行时出现在构建日志中。
每次我要运行模块的启动器时,是否有任何方法可以运行此任务?当然,我可以进行一些智能文件比较,看看是否需要生成,但是现在我只希望每次都完成。我想念什么吗?
答案 0 :(得分:2)
IDEA拥有自己的构建系统,独立于Gradle。
您可以将其配置为在自己的构建任务之前运行Gradle任务。
您还可以配置它以将所有构建/运行任务委托给Gradle。但这不是默认设置。