Незначительные изменения в файле класса внутри JAR

#java #vim #jar

#java #vim #jar

Вопрос:

У меня есть пользовательское устаревшее приложение, созданное на Java, в которое мне нужно внести очень незначительные изменения. Мне нужно изменить ссылку на год недели ‘ГГГГ’ на год дня ‘гггг’ в одном файле класса.

Я узнал, что vim может редактировать файлы классов внутри JAR, что казалось самым простым решением, поэтому использовал это, чтобы сделать редактирование копией JAR. Однако при попытке запустить новый JAR я сталкиваюсь с исключениями для класса, который я отредактировал, указав:

 "Exception in thread "main" java.lang.ClassFormatError: Extra bytes at the end of class"
  

Глядя на размеры файла, похоже, что, хотя все, что я сделал, это изменил ‘ГГГГ’ на ‘гггг’ в одной строке, файл на 52 байта больше оригинала. Я думаю, что vim добавляет дополнительные символы при сохранении. Я попробовал ‘установить nofixendol’, ‘установить двоичный noeol’, ‘установить двоичный noendofline’ перед сохранением, так как я видел, как люди упоминали, что vim добавляет конечные строки, но это не помогло.

Это такое незначительное изменение в огромном наборе пользовательского кода, но, похоже, я не могу внести изменения.

Ранее пытался скомпилировать из исходного кода или декомпилировать JAR, но всегда терпел неудачу из-за проблем с зависимостями, понятия не имею, как это было изначально скомпилировано. Пытался включить исходный JAR при компиляции, и это все еще не сработало. Вот почему я так надеялся, когда обнаружил, что vim может его редактировать.

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

Ответ №1:

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

О, и если вы хотите внести более сложные изменения, JBE — это довольно круто.