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

标签 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);
    }
}

最佳答案

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

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

关于java - 有没有办法从 Maven 构建中获得一致的 MD5 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678730/

相关文章:

maven - 依赖项和插件标签中的依赖项有区别吗?

hash - 需要更快的 Linux 指纹/哈希比较的建议

java - PayPal ExpressCheckout 实现 - 导入错误,缺少 jar 文件?

java - 在 Java 中将文本文件转换为 JSON

java notify() 不会释放循环中等待对象的锁

java - SWT View 中的视频 Swing JPanel

java - 从生成的源创建 XML

java - Gradle Maven 插件 "install"任务不适用于 Android 库项目

bash - 比较目录中不包括多个硬链接(hard link)的所有文件的 md5

c# - 在 C# 中执行 MD5 并一次下载的有效方法是什么?