【发布时间】:2020-09-30 11:19:02
【问题描述】:
我想在创建JAR 到exclude certain Class-Path entries 后修改MANIFEST.MF。为此,我决定使用zip4j。提取似乎工作正常,但要将MANIFEST.MF 文件放回JAR,我使用以下代码:
String metaInfFolderName = "META-INF";
Path extractedManifestFilePath = Paths.get("...");
ZipFile zipFile = new ZipFile("Test-Zip-File.zip");
ZipParameters zipParameters = new ZipParameters();
zipParameters.setDefaultFolderPath(metaInfFolderName);
zipFile.addFile(extractedManifestFilePath.toFile(), zipParameters);
但是,此代码无法按预期工作:父目录最终始终命名为 NF,而不是完整的 META-INF。似乎起始字符被切断了。这可能是什么原因,或者是否有另一种有意义的可能性来替换 JARs(本质上只是 ZIPs)中的文件?
maven 依赖:
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.6.1</version>
</dependency>
此外,我尝试使用jar 实用程序,如here 所述,但是当调用命令jar uf MyJAR.jar META-INF/MANIFEST.MF 时,JAR 内的MANIFEST.MF 被删除而不是被替换。通过zip -ur MyJAR.jar "META-INF/MANIFEST.MF" 使用zip 实用程序可以工作,但会损坏JAR 文件,因此它不再可运行:
Error: An unexpected error occurred while trying to open file MyJAR.jar
【问题讨论】:
标签: java jar zip manifest.mf zip4j