有没有办法从 Maven 构建中获得一致的 MD5 哈希?

use*_*809 2 java maven md5sum

我可以在一组 jar/war 文件上连续运行相同的 Maven 构建 5 次,对它们中的任何一个都没有任何更改,但每次我都会在每个 jar/war 文件上获得不同的 MD5 哈希值。我希望 java 编译器每次都能产生相同的哈希值。是否有任何文件会影响我可以排除的哈希值,以便每次都给我相同的哈希值?或者只是编译器每次都不会以相同的方式编译相同的代码?

使用以下代码生成哈希:

public static String getHash(File file) throws FileNotFoundException, IOException {
    if(file == null || !file.isFile()) {
        return "";
    }
    FileInputStream in = null;
    try {
        in = new FileInputStream(file);
        byte [] bytes = toByteArray(in);
        return getHash(bytes);
    } catch(Exception e) {
        Logging.log("Unable to get MD5 hash for file: " + ile.getName());
    } finally {
        StreamUtils.close(in);
    }
    return "";
}

public static String getHash(byte[] bytes) {
    MessageDigest digest = getMessageDigest();
    byte[] hash = digest.digest(bytes);
    StringBuilder builder = new StringBuilder();
    for (int val : hash) {
        builder.append(Integer.toHexString(val & 0xff));
    }
    return builder.toString();
}

private static MessageDigest getMessageDigest() {
    try {
        return MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 5

jar 或 war 文件是一个 zip 文件。zip 文件包含 zip 条目。zip 条目包含有关文件的元数据,例如它们的创建和修改时间。

您应该将生成的 jar/war 文件的每个文件的内容传递给您的哈希,始终以相同的顺序。