合并jar文件时遇到问题。

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

我有一个jar文件,比如apache-cassandra-3.11.6.jar.首先我把spitchunk分成了多个jar,如下图。

apache-cassandra1.larapache-cassandra2.larapache-cassandra3.larapache-cassandra4.larapache-cassandra5.larapache-cassandra6.larapache-cassandra6.jar

然后我又把它们重新组合成新的jar文件,即apache-cassandra_Merged.jar.现在问题来了,我把原来的jar文件即apache-cassandra-3.11.6.jar和新的jar文件即apache-cassandra_Merged.jar进行对比,发现两者并不匹配。

当我把原来的jar文件即apache-cassandra-3.11.6.jar和新的jar文件即apache-cassandra_Merged.jar进行对比时,发现两者并不匹配,新创建的jar文件是apache-cassandra_Merged.jar。

新建的apache-cassandra_Merged.jar文件,它的大小也减少了。

请看下面我的代码,供大家参考。

/// Chunking/spliting into mutiple jars
Path path = Paths.get("/Original_Jar/apache-cassandra-3.11.6.jar");
byte [] data = Files.readAllBytes(path); // Will read all bytes at once

现在把总的字节数分成相等的部分,然后把每个小的jar一个一个的写进去。

int count = 0;
for(byte[] rangeData : Arrays.copyOfRange(data, rangeSTART, rangeEND)){
        FileOutputStream fileOutputStream1 = new FileOutputStream("/Cassandra_Image/Chunked_Jar/apache-cassandra"+count+".jar");
        fileOutputStream1.write(rangeData);
}

/合并回一个jar对于合并,我用了同样的方法。为每个小块jar创建字节数组,并逐个写入FileOutputStream("Merged_Jarapache-cassandra_Merged.jar")。

请告诉我,我是否应该使用其他的方法算法来拆分jar,然后再重新组装,这样也能保证分块和合并后数据的原始性。

注:其实我想把jar传输到任何服务器目录,在那里我应该传输一个有限大小的jar,所以对于大大小小的jar,我需要把它们分割成小的jar,并把它们一个一个地发送,然后再把它们重新组合在目标导演的地方,它应该是原始的jar。

先谢谢你。

java file jar chunked-encoding chunked
2个回答
0
投票

这可能不是答案,但我提供给你一个信息。Java也提供了pack格式,你可以在这里压缩jar文件,然后你可以使用unpack解压,这个工具叫做 包200.

如何压缩

<java_location>...\jre\lib>pack200 -J-Xmx256m small.jar.gz big.jar

如何解压

<java_location>...\jre\lib>unpack200 small.jar.gz big.jar

您可以参考以下链接。

https:/docs.oracle.comjavase1.5.0docstooldocssharepack200.html。

https:/docs.oracle.comjavase7docstechnotestoolsshareunpack200.html。


0
投票

我可以用shell脚本解决这个问题.把下面的代码写在我的shell脚本文件里,然后通过我的java代码运行。

split -b 1000000 src.jar target.jar
cat src.jaraa src.jarab src.jarac src.jarad src.jarae > merged.jar

并与任何算法比较,如sha256校验和将正常工作,它显示相等。

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