如何使用configurations.runtimeClasspath gradle构建可重现的zip?

问题描述 投票:0回答:1

我有一个 gradle 任务来构建一个可重复的 zip,对其进行散列,然后检查散列是否相同。

task buildZip(type: Zip) {
    includeEmptyDirs = false
    preserveFileTimestamps = false
    reproducibleFileOrder = true

    from sourceSets.main.output
}

task createChecksums(type: Checksum, dependsOn: build) {
    inputFiles.setFrom("${buildDir}/distributions");
    appendFileNameToChecksum.set(true)
}

这按预期工作,并且哈希值是一致的。但是,当我尝试将 .jar 依赖项包含在

configurations.runtimeClassPath
下时,我注意到:

task buildZip(type: Zip) {
    includeEmptyDirs = false
    preserveFileTimestamps = false
    reproducibleFileOrder = true

    from sourceSets.main.output
    
    into("lib") {
        from configurations.runtimeClasspath
    }
}

哈希值在每次干净构建时都会发生变化。为什么会发生这种情况以及如何纠正?

java gradle jar zip build.gradle
1个回答
0
投票

每次干净构建时哈希值可能会发生变化,因为

configurations.runtimeClasspath
中的文件顺序发生了变化。在将文件添加到 zip
 之前,您应该尝试对 
configurations.runtimeClasspath 中的文件进行排序,以确保顺序一致。

task buildZip(type: Zip) {
includeEmptyDirs = false
preserveFileTimestamps = false
reproducibleFileOrder = true

from sourceSets.main.output 

into("lib") {
    from configurations.runtimeClasspath.files.sort()
}
}

这应该确保

configurations.runtimeClasspath
中的文件顺序一致,并且哈希值在每个干净构建中保持相同。

© www.soinside.com 2019 - 2024. All rights reserved.