2016-11-02 19 views
0

Мне нужно отредактировать один файл класса из jar.Компиляция одного файла класса, отредактированного из существующего jar без зависимостей

Я успешно извлек файл класса из jar, и я декомпилировал его и нашел логику, которую мне нужно изменить.

Однако, я не могу пересобрать этот файл класса, потому что он импортирует библиотеки не имеют и не знают, где получить ( и NetBeans iharder).

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

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

+0

* Необходимые файлы должны быть в банке, верно? * Неверно. –

+0

@RobbyCornelissen Не могли бы вы объяснить? Файлы классов в банке должны быть достаточными для разрешения разрешенных классов. – 4castle

+0

Ответы на [Этот вопрос SO] (http://stackoverflow.com/questions/14069082/how-to-change-already-compiled-class-file-without-decompile) могут помочь. –

ответ

0

Виртуальная машина Java просто нужно, чтобы иметь возможность найти зависимости во время выполнения. Часто они будут установлены в стандартном местоположении (путь к классам), а не в комплекте с банкой, которая их использует. Тем не менее, теоретически вы даже можете сделать что-то вроде зависимостей загрузки во время выполнения и загрузить их через загрузчик классов.

Помимо этого, декомпиляция и перекомпиляция часто не очень хорошая идея, поскольку декомпиляция является процессом с потерями и ошибкой. Как правило, он работает только в простых случаях и имеет ограничения, которые вы обнаружили.

Если вы понимаете байт-код Java, вы можете отредактировать класс, разобрав его с помощью Krakatau, отредактировав файл .j, а затем снова смонтировав. Это позволяет редактировать любой файл класса без необходимости компиляции, то есть вам не нужны зависимости. Он также работает независимо от того, насколько сложным является класс, и даже работает на запутанных классах.