Я хочу изменить MANIFEST.MF
после создания JAR
, чтобы исключить определенные записи Class-Path
. Для этого я решил использовать 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
. Кажется, что начальные символы обрезаны. В чем может быть причина этого или есть другая значимая возможность замены файлов внутри JAR
s (которые по сути являются просто ZIP
s)?
maven
зависимость:
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>2.6.1</version>
</dependency>
Кроме того, я попытался использовать утилиту jar
, как описано здесь, но когда при вызове команды jar uf MyJAR.jar META-INF/MANIFEST.MF
MANIFEST.MF
внутри JAR
удаляется, а не заменяется. Использование утилиты zip
через zip -ur MyJAR.jar "META-INF/MANIFEST.MF"
работает, но повреждает файл JAR
, поэтому он больше не запускается:
Error: An unexpected error occurred while trying to open file MyJAR.jar