Обновление файлов в файле JAR - PullRequest
0 голосов
/ 24 августа 2018

По сути, у меня есть файл Jar, способный анализировать файлы Java, и выполнить некоторые вычисления на основе проанализированных значений.

Проблема в том, что грамматика в этом фляге старая и поддерживает только версию 1.5 Java. Я оглянулся и нашел грамматику, выпущенную той же компанией, которая поддерживает Java версии 1.8, поэтому я хочу обновить файл Jar двумя обновленными файлами, необходимыми приложению.

Анализируя файл Jar с помощью JD-GUI, я вижу, что это местоположение двух файлов, которые я хочу обновить:

JarDir/foo/bar/Java.g

JarDir/foo/bar/JavaTreeParser.g

Сначала я последовал предложению и попытался использовать 7-zip для редактирования обоих файлов. Я в основном открыл файл Jar с помощью 7-zip, нашел файлы и отредактировал их содержимое. После попытки «обновить» Jar, похоже, работает так же, как и до его обновления. Например, он все еще не может разобрать этот ArrayList<String> s = new ArrayList<>();, так как оператор diamond является дополнением Java 7.

Теперь я думал об использовании jar uf подобно , который предлагает этот ответ , но я не знаю, как указать путь, который я хочу вставить в Jar.

Может кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

После некоторого времени анализа файла Jar я понял, что Java.g и JavaTreeParser.g не используются в коде. Они использовались для генерации некоторых файлов Java и некоторых файлов .token. Это файлы, используемые приложением.

0 голосов
/ 24 августа 2018

7-почтовое решение должно сработать.Я делал это много раз.Проверьте свою математику ...

Вы должны быть в состоянии сделать jar -tvf xxx.jar после редактирования с помощью 7-zip, чтобы убедиться, что он был изменен.Обратите внимание на размеры файлов и даты, чтобы увидеть, что вы действительно изменили то, что хотите.

Использовать jar uf (или -uf) довольно просто.Если вы хотите обновить, например, com.foo.bar.class, вам нужно создать пустую структуру каталогов с директорией com, содержащей директорию foo, которая содержит bar.class.Затем из каталога, содержащего каталог com, запустите:

jar -uf yourJarFile.jar com

Опять проверьте свою работу, выполнив jar -tvf, чтобы увидеть, что файл был изменен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...