Ответ 1
Вы можете использовать Jar Jar Links для достижения этого. Также вам не нужен исходный код классов, которые вы хотите изменить, так как программа делает это на уровне байт-кода (т.е. Он напрямую модифицирует файлы .class.)
У меня есть файл jar из внешнего источника. Все классы в банке находятся в пакете com.xyz.
Я хотел бы переместить все классы в пакет com.xyzold.
Это просто, как распаковать банку, переименовать xzy-папку в xyzold и перерисовать ее, или мне нужно также изменить каждый файл класса?
Здесь мое решение, используя Jar Jar Links
java -jar jarjar-1.4.jar process rules.txt google-collections-1.0.jar google-collections-old-1.0.jar
И вот содержимое моего файла rules.txt:
rule com.google.** [email protected]
Вы можете использовать Jar Jar Links для достижения этого. Также вам не нужен исходный код классов, которые вы хотите изменить, так как программа делает это на уровне байт-кода (т.е. Он напрямую модифицирует файлы .class.)
Вы должны взглянуть на Jar Jar Links. (Я не беру никакой ответственности за имя:).)
Его основной случай использования заключается в том, чтобы встроить внешние банки в свою собственную банку, и для этого он может переименовать существующие пакеты. Он изменяет необходимый байтовый код. Возможно, вы сможете настроить его, чтобы делать то, что хотите.
Вы можете использовать плагин Maven shade, чтобы сделать это в сборке Maven.
Возможно, вы можете сделать это с помощью Profuscator ProGuard. Он, безусловно, может перемещать код в пакетах и работает на уровне байтового кода. Его основная цель - обфускация, хотя, возможно, сначала нужно рассмотреть один из других вариантов.
Нет, вам нужно изменить все классы в файле jar. Для изменения пакета необходимо иметь исходный код.
Вам также потребуется изменить все исходные файлы Java. Не только имена пакетов, но и импорт, и любые возможные встроенные объявления. На самом деле это не стоит.