#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 — это довольно круто.