Изменение скомпилированных файлов java .class в JAR

Мое требование: я распаковал файл jar, а затем изменил файл .class после декомпиляции в файл .java.
В этом файле .java мало ошибок, так как он использует несколько вещей, таких как методы и переменная из других мест, которые находятся в JAR.
Теперь я хочу изменить файл .java в файл .class, а затем хочу добавить в JAR и посмотрите, работают мои изменения или нет.

Фон:

  1. Я распаковал файл ATU Jar и отменил файл ATUReportsListener.class.
  2. Теперь у меня есть файл ATUReportsListener.java, и я внес в него некоторые изменения.
  3. Теперь я хочу снова преобразовать в исполняемый файл .class и запаковать в JAR. Но поскольку в ATUReportsListener.java есть несколько вещей, которые зависят от других файлов оригинального ATU JAR, я не могу его скомпилировать.

Как мне это сделать?
Преобразование в файл .class . Пожалуйста, дайте ваш ценный вклад.


person Ram Patro    schedule 09.02.2016    source источник
comment
Нет, это невозможно!   -  person Jens    schedule 09.02.2016
comment
Процесс преобразования файла .java в файл .class называется компиляцией независимо от того, как вы это делаете и какие инструменты используете.   -  person SpaceTrucker    schedule 09.02.2016
comment
Ага. Пишите байтовый код вручную — есть спецификация, чтобы вы могли получить трещины. А если серьезно - нет, нет. Что вы ожидали?   -  person Boris the Spider    schedule 09.02.2016
comment
Предыстория: 1. Я распаковал файл ATU Jar и декомпилировал ATUReportsListener.class. 2. Теперь у меня есть файл ATUReportsListener.java, и я внес в него некоторые изменения. 3. Теперь я хочу снова преобразовать исполняемый файл «.class» и упаковать его в JAR. Но поскольку в ATUReportsListener.java есть несколько материалов, которые зависят от других файлов исходного ATU JAR. Я не могу его скомпилировать. Как бы я это сделал???? Покрытие в файл .class . Пожалуйста, дайте ценный вклад   -  person Ram Patro    schedule 09.02.2016


Ответы (6)


Файл .class создается только после компиляции. декомпиляция и внесение изменений не сделают это с тем же байт-кодом. вам нужно отсортировать эти ошибки и снова скомпилировать

person Zubair Nabi    schedule 09.02.2016

.class генерирует байт-код для (успешно скомпилированного кода, т.е. «может быть запущен на JVM»). Поэтому вы должны позволить компилятору попытаться построить ваш код, чтобы знать, что операция будет успешной и безошибочной.

Источник: https://en.wikipedia.org/wiki/Java_class_file

удачи.

person A-Ace    schedule 09.02.2016
comment
Предыстория: 1. Я распаковал файл ATU Jar и декомпилировал ATUReportsListener.class. 2. Теперь у меня есть файл ATUReportsListener.java, и я внес в него некоторые изменения. 3. Теперь я хочу снова преобразовать исполняемый файл «.class» и упаковать его в JAR. Но поскольку в ATUReportsListener.java есть несколько материалов, которые зависят от других файлов исходного ATU JAR. Я не могу его скомпилировать. Как бы я это сделал???? Преобразование в файл .class. Пожалуйста, дайте ценный вклад - person Ram Patro; 09.02.2016

Как было сказано ранее, вы просто не можете.

Файл класса Java — это файл (с расширением имени файла .class), содержащий байт-код Java, который может выполняться на виртуальной машине Java (JVM). Файл класса Java создается компилятором Java из исходных файлов языка программирования Java (файлы .java), содержащих классы Java. Если исходный файл имеет более одного класса, каждый класс компилируется в отдельный файл класса.

Поэтому без компиляции исходного кода вы не сможете получить файл .class.

person aribeiro    schedule 09.02.2016
comment
Предыстория: 1. Я распаковал файл ATU Jar и декомпилировал ATUReportsListener.class. 2. Теперь у меня есть файл ATUReportsListener.java, и я внес в него некоторые изменения. 3. Теперь я хочу снова преобразовать исполняемый файл «.class» и упаковать его в JAR. Но поскольку в ATUReportsListener.java есть несколько материалов, которые зависят от других файлов исходного ATU JAR. Я не могу его скомпилировать. Как бы я это сделал???? Преобразование в файл .class Пожалуйста, дайте ценный вклад - person Ram Patro; 09.02.2016
comment
Чтобы правильно скомпилировать ваш ATUReportsListener.java и сгенерировать предполагаемый .class, вы также должны указать все зависимости классов, зависимости этих зависимостей и так далее. У вас есть доступ только к JAR, без исходного кода? - person aribeiro; 09.02.2016
comment
Да, у меня есть JAR, и я декомпилировал и получил файлы .java с полным кодом. также я сделал свои предполагаемые изменения. теперь я должен скомпилировать все это. Можете ли вы помочь мне ? - person Ram Patro; 10.02.2016

Нет, вы не можете напрямую преобразовать файл Java в файл класса. Решение вашей проблемы - сначала декомпилировать целые классы файлов jar, а затем внести изменения в исходные файлы. Скомпилируйте его и создайте файл jar.

person Laxman Singh    schedule 09.02.2016
comment
Добавьте больше деталей и ссылок в свой ответ - person NSNoob; 09.02.2016
comment
Полную банку можно декомпилировать как stackoverflow.com/questions/647116/ . Теперь внесите необходимые изменения в исходный код и снова создайте файл jar. - person Laxman Singh; 09.02.2016
comment
Привет, Лаксман Сингх, но декомпилятор не позволяет вам редактировать код правильно ?? Я могу только посмотреть код. и если я хочу скомпилировать, чтобы снова получить .class, я должен добавить все файлы .java из JAR в новый проект. Есть ли альтернативный вариант??? - person Ram Patro; 09.02.2016
comment
Я извлек все файлы .java в JAR, а затем заменил файл. Как мне теперь скомпилировать все файлы .java??? - person Ram Patro; 09.02.2016

Вы задаете неправильный вопрос. Правильный вопрос: «Как мне изменить код в скомпилированном Jar».

Как вы уже поняли, декомпиляция не поможет, потому что обычно невозможно перекомпилировать результаты. Вместо этого вам нужно будет изменить код на уровне байт-кода. Это имеет то преимущество, что оно всегда будет работать, независимо от того, на что похож код или запутан ли он. Недостатком, конечно, является то, что вам нужно понимать байт-код Java, но это не так уж сложно выучить.

Есть несколько инструментов, которые вы можете использовать для редактирования байт-кода. Например, дизассемблер и ассемблер Krakatau. Средство просмотра байт-кода Konloch предлагает графический интерфейс.

person Antimony    schedule 09.02.2016
comment
Привет @Antimony, не могли бы вы дать мне ссылку ??? так что я могу следовать и сделать свою работу. Заранее спасибо! - person Ram Patro; 09.02.2016
comment
@ramnarayan Вы пробовали скачать BCV? github.com/Konloch/bytecode-viewer. Что касается изучения байт-кода, лучшим справочником является спецификация JVM. docs.oracle.com/javase/specs/jvms/se8/ html/index.html - person Antimony; 09.02.2016

Вот решение. Конечно, мы должны скомпилировать файл .java, чтобы получить файл .class.

Для решения работы с JAR:

  1. Распаковать JAR с помощью декомпилятора (http://jd.benow.ca/)
  2. Получите исходный код декомпилированных файлов (вы получите пакет (все файлы .java))
  3. Теперь внесите изменения, где хотите
  4. Создайте проект JAVA в Eclipse и импортируйте все.
  5. Теперь просто сохраните его
  6. Вы можете увидеть файлы .class в папке bin.
  7. Добавьте файл .class в исходные наборы исполняемых файлов .class.
  8. Готово, просто снова заверните его в JAR (вы можете использовать eclipse и экспортировать как JAR)

Спасибо всем за ответ.

person Ram Patro    schedule 11.02.2016