2014-10-21 6 views
0

Мне нужно исправить старую версию некоторого программного обеспечения Java. Проблема в том, что восстановление всего пакета в старой версии было бы очень сложно, потому что это очень сложная программа.Скомпилировать изолированный файл java

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

UPDATE - Как сделать Java Patch

Используя ответ Эллиот Фриша я смог сделать патч. Вот командная строка:

javac -target 1.5 -source 1.5 -cp original.jar;otherlib.jar CorrectedSource.java 

Итак, подведем итоги. Вы указываете целевую версию Java и устанавливаете исходный код для соответствия, включаете исходный jar (и любые libs) в качестве пути к классам, а затем, наконец, называете исходный код, который хотите скомпилировать. Затем вы можете взять результирующие файлы классов и вставить их в банку, заменив старые файлы классов.

To find out the target version of your class file

+0

Позвольте мне задать вопрос: когда вы используете библиотеку jar в своем приложении, вам нужны исходные файлы этой банки, чтобы иметь возможность компилировать java-код, который использует классы из этой банки? – Gimby

ответ

3

Он должен работать, если вы перекомпилировать только этот один файл, пока

  1. Вы можете использовать тот же -target <release>, за javac -help, которые будут Сформировать файлы классов для конкретной VM версии и я считаю, вам нужно соответствовать исходной версии.
  2. Вы заменяете версию старого класса в файле jar новым файлом класса, который вы создали в . Пожалуйста, резервная копияоригинал Jar файл первый.
+0

Не работает. Я получаю много ошибок «не могу найти символ» для символов, которые определены в других файлах исходного кода. Обратите внимание на мой вопрос: попытка собрать исходный набор исходных файлов будет очень сложной. Мне нужно скомпилировать/изменить этот ОДИН файл без наличия всех исходных файлов в проекте. –

+0

Добавьте оригинальную (скомпилированную) банку к аргументу '-cp' в' javac'. –

+0

...и он работает (полное решение в обновленном вопросе) –

1
  1. исходный файл Compile с помощью target <release>, чтобы убедиться, что это та же версия, как старый кувшин был составлен в.
  2. Переименовать filename.jar в filename.zip
  3. Распакуйте .zip файл
  4. Заменить .class файл с новым файлом
  5. Rezip архив. Это нормально использовать сжатие. Убедитесь, что структура каталогов такая же, как и была, и что вы включаете каталог META-INF.
  6. Переименуйте файл в filename.jar еще раз.

Примечание: Контрольная сумма будет отличаться. Некоторые исполняемые банки проверяют это, другие - нет. YMMV

 Смежные вопросы

  • Нет связанных вопросов^_^