Есть ли способ патчить файлы JAR?

Предположим, я отправил кому-то большой кувшин или военный файл. Могу ли я позже просто изменить один небольшой раздел и отправить его ему? Предположим, я только что изменил один файл класса. Я перекомпилировал Java для в файл класса. Иначе, чем обменять новый файл класса на старый файл класса, там что-нибудь еще, что я должен сделать?

В java нужно ли перестраивать весь файл jar/war? Кроме того, есть ли пакет с открытым исходным кодом для обновления?

7 ответов

Решение

Человек, получающий файл класса, может просто добавить этот файл в банку, если он знает, в какую директорию его поместить. Будьте утомлены подписанными банками, как отмечено в комментариях.

jar uf foo.jar foo.class

http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jar.html

Вы можете скопировать измененный файл.class таким образом.

jar uf test.jar com\test\Test.class

Если для вас есть логический способ выделить компоненты в отдельные файлы JAR, я бы создал файл JAR для каждого типа компонента. Таким образом, вам не придется перераспределять все обратно клиенту. Например, взгляните на то, как Spring 3 выделяет компоненты.

Есть JARDiff, предназначенный для обновления приложений Java WebStart.

Просто откройте свой jar-файл с помощью 7zip и перезапишите отредактированные вами классы. Убедитесь, что сначала сделали резервную копию.

Посмотрите на использование jar команда. Опция u позволяет обновить существующий архив.

Вам нужно будет восстановить весь файл JAR, если вы не хотите, чтобы они разархивировали, перезаписать файл и заново.

Если у вас есть старый и новый jar-файл, вы можете создать xdelta для обоих и отправить только дельта-файл вашему клиенту, который должен быть намного меньше, чем весь jar-файл, если вы изменили только один класс из множества. Это также должно работать для подписанных jar-файлов, но требует, чтобы и отправитель, и получатель имели программу xdelta (или могли ее установить).

И, конечно, вы должны сначала создать новую банку (но это можно сделать методами, уже упомянутыми в других ответах).

Другие вопросы по тегам