Как упаковать файлы.class из пакета по умолчанию, используя jarjar?

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

Просматривая здесь другие вопросы, я думаю, что jarjar может быть именно тем, что я ищу, но я понятия не имею, как его использовать.

Поэтому мой вопрос заключается в том, как использовать jarjar для перепаковки файлов.class из пакета по умолчанию в другой именованный пакет?

РЕДАКТИРОВАТЬ: Я хочу кое-что уточнить - у меня нет источников банку, которую я хочу переупаковать, поэтому я не знаю, как я мог бы перекомпилировать код. Запутывание и размышления исключены.

РЕДАКТИРОВАТЬ 2: Кажется, это очень просто сделать с помощью jarjar:) java -jar jarjar.jar process rules.rules in.jar out.jar

rules.rules выглядит примерно так: правило net.ylivay.src.a

Задача решена!

2 ответа

Затем вам нужно перекомпилировать, чтобы изменить пакет - простое перемещение файлов класса внутри jar (или снаружи) вам не поможет.

Чтобы переместить классы в другой пакет, вам нужно не только изменить их расположение в структуре каталогов jar (или файловой системы), но и изменить package объявление в исходных файлах, а затем перекомпилировать классы.

Вместо того, чтобы пытаться переупаковать банку, вам, вероятно, стоит взглянуть на мощные инструменты рефакторинга, доступные в IDE, такие как Eclipse, которые упрощают подобные вещи. Но так как вы говорите (в обновлении вашего вопроса), что у вас нет исходных файлов, это невозможно.

Альтернативой может быть создание прокси-классов, которые вызывают те, которые вам нужны, в пакете по умолчанию, используя отражение. Но это не только неприятно, но вы говорите, что об осмыслении речи не может быть и речи.

Таким образом, вы не можете делать то, что вы хотите.

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