You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JVM应用构建时自动生成version.properties文件的配置问题

解决Gradle生成version.properties被清理的问题

你的问题核心是直接将文件写入了processResources任务的输出目录,而processResources执行时会先清空该目录,再复制原始资源,导致你生成的文件被覆盖删除。下面是两种靠谱的解决方式:

方式一:用生成目录+SourceSet关联(推荐)

修改根项目的build.gradle.kts,把生成文件的目录改成Gradle规范的生成资源目录,再将这个目录加入到资源源集合中,让processResources自动把它打包进去:

allprojects {
    //...

    tasks.register("createVersionPropertiesFile") {
        group = "build"
        // 指定生成到单独的目录,避免被processResources清理
        val generatedResourcesDir = File("$buildDir/generated/resources/version")
        val versionFile = File(generatedResourcesDir, "version.properties")

        // 定义任务输出,让Gradle支持增量构建
        outputs.file(versionFile)

        doLast {
            generatedResourcesDir.mkdirs()
            versionFile.writeText("version=${project.version}")
        }
    }

    // 将生成目录添加到main资源的源目录中
    sourceSets {
        main {
            resources {
                srcDir(tasks["createVersionPropertiesFile"].outputs.files)
            }
        }
    }

    // 确保processResources执行前先生成文件
    tasks.processResources {
        dependsOn(tasks["createVersionPropertiesFile"])
    }
}

为什么这样有效:

  • processResources只会清理自己的输出目录(build/resources/main),不会碰我们自定义的生成目录
  • 把生成目录加入sourceSets.main.resources.srcDirs后,processResources会自动将该目录下的文件和src/main/resources的文件一起复制到输出目录,不会丢失

方式二:直接在processResources中生成(更简洁)

如果不需要单独的任务,可以直接在processResources任务中嵌入生成逻辑,省去单独注册任务的步骤:

// 在应用模块的build.gradle.kts中配置
tasks.processResources {
    // 直接生成version.properties到输出目录
    into("") {
        from(temporaryDir) {
            val versionFile = File(temporaryDir, "version.properties")
            versionFile.writeText("version=${project.version}")
            rename { "version.properties" }
        }
    }
}

这种方式利用Gradle的临时目录生成文件,再通过from加入到资源处理流程中,避免了目录冲突和被清理的问题。

内容的提问来源于stack exchange,提问作者Tenfour04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:13:11