Есть ли способ исправления файлов jar?

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

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

Ответы

Ответ 1

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

jar uf foo.jar foo.class

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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