Как мне извлечь исходный код из файла jar?

5 ответов

Лучший ответ

Если вы действительно получили исходный код продукта и все, что у вас есть, это файлы JAR, тогда файлы JAR (которые на самом деле являются файлами ZIP с другим суффиксом файла и определенным типом «манифеста») должны содержат набор файлов с расширением «.java». Вы должны иметь возможность проверить это с помощью любого инструмента для архивирования ZIP.

Если в JAR-файлах нет файлов «.java» (например, только много файлов «.class» и других), у вас нет исходного кода продукта. Вносить изменения будет очень сложно , учитывая, что вы не Java-разработчик.

Предполагая, что вы делаете это законно (т.е. с явным или неявным разрешением разработчика продукта), вы сэкономите много времени, если сможете также получить инструкции по сборке продукта. Например, если он построен с использованием Ant, вам нужны файлы «build.xml».

10

Stephen C
25 Июн 2013 в 14:34

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

Однако файлы jar могут помочь вам, если они содержат некоторые библиотеки / пакеты / классы, которые вы считаете необходимыми для проекта, над которым вы работаете. Таким образом, вы можете добавить их в свой путь компиляции, если вы используете IDE Netbeans, и использовать их, даже не заглядывая в источник. Однако это будет работать лучше всего, если вы выполняете какую-то инкрементную разработку в своем проекте. поэтому это сильно зависит от того, как вы создаете свое программное обеспечение, то есть является ли оно инкрементным или вы можете изменить то, что получили … для последнего вы можете рассмотреть вопрос о декомпиляции или запросить исходный код

jgt
3 Июл 2010 в 16:13

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

Если вам нужно ИЗМЕНИТЬ код внутри банок, вам будет намного лучше, если у вас будет исходный код для этой банки, который вам нужно обновить, а затем работать с ним.

Если у вас нет исходного кода, и вам нужно изменить класс, вы можете декомпилировать этот класс, например, JAD в файл Java (будьте осторожны, могут быть ошибки), а затем работайте с ним. Вам просто нужно, чтобы этот класс был перед jar в пути к классам (если jar не запечатан, и тогда у вас возникнет совершенно новый вопрос для stackoverflow).

У вас в команде есть более опытные программисты на Java, вы можете попросить помощи?

2

Thorbjørn Ravn Andersen
3 Июл 2010 в 14:35

Обычно вы упаковываете (скомпилированные) файлы .class и распространяете их в файлах .jar, но можно поместить любой тип файла (включая исходный код) в архив .jar. Если вам нужно изменить код в библиотеке, вам нужно будет увидеть исходный код.

Также возможно, что файлы .jar в вашем проекте являются сторонними (или внутренними проприетарными) библиотеками, которые вам вообще не нужно менять. Довольно часто в ваш jar-файл включаются библиотеки, которые вы просто используете, не внося изменений. Если остальная часть кода вашего приложения доступна, вы можете просто изменить его, не касаясь кода библиотеки.

5

Bill the Lizard
3 Июл 2010 в 14:27

JAR-файл аналогичен zip-файлу, поэтому он может содержать или не содержать исходный код, необходимый для разработки. Вы можете прочитать о файлах jar здесь.

9

Dolph
3 Июл 2010 в 14:31

Типичные ошибки компиляции и запуска Java программ

Команда javac не найдена

Если при запуске javac, т.е. при попытке компиляции Java программы вы получаете ошибку:

"javac" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Это означает, что JDK не установлен. Либо установлен, но не настроены переменные окружения. Способы исправления очевидны:

  • установить JDK
  • настроить переменные окружения

Если JDK установлен, то можно обойтись без добавления переменной окружения. Для этого используйте абсолютный путь до исполнимого файла javac:

C:\Program Files\Java\jdk1.8.0_131\bin\javac.exe программа_для_компиляции.java

Ошибка Class names are only accepted if annotation processing is explicitly requested

Если попытаться скомпилировать программу следующим образом:

"C:\Program Files\Java\jdk1.8.0_131\bin\javac.exe" Welcome2

то возникнет ошибка:

error: Class names, 'Welcome', are only accepted if annotation processing is explicitly requested
1 error

Причина ошибки в том – что вы забыли указать расширение файла .java.

Ошибка записи (error while writing)

Запуск компиляции:

C:\Users\Alex>"C:\Program Files\Java\jdk1.8.0_131\bin\javac.exe" C:\Welcome.java

Компиляция заканчивается ошибкой:

C:\Welcome.java:1: error: error while writing Welcome: C:\Welcome.class (╬Єърчрэю т фюёЄєях)
public class Welcome {
       ^
1 error

Причина ошибки в том, что у компилятора (javac) недостаточно прав на запись в тот каталог, куда он пытается сохранить новый файл .class. Чтобы ошибка исчезла: предоставьте компилятору дополнительные права (запустите от имени администратора), либо сохраняйте в папку, на которую у текущего пользователя имеются права записи.

Ошибка «class is public, should be declared in a file named»

Запуск компиляции

"C:\Program Files\Java\jdk1.8.0_131\bin\javac.exe" C:\Welcome.java

который заканчивается примерной такой ошибкой

C:\Welcome.java:1: error: class Welcomee is public, should be declared in a file named Welcomee.java
public class Welcomee {
       ^
1 error

означает, что вы неправильно назвали класс в исходном коде программы. Имя класса должно совпадать с именем файла. В данном случае файл называется Welcome.java, а класс внутри программы назван Welcomee

Error: Could not find or load main class

Если попытаться запустить программу следующим образом:

java Welcome.class

то возникнет ошибка

Error: Could not find or load main class Welcome.class

Причина её в том, что не нужно было добавлять к названию файла расширение .class. Виртуальная машина автоматически добавляет расширение и в приведённом примере она ищет файл Welcome.class.class

Ошибка Error: Could not find or load main class при запуске Java программы по абсолютному пути

Эта ошибка возможно при запуске Java программы по абсолютному пути:

java C:\Welcome

Будет выведено:

Error: Could not find or load main class C:\Welcome

Ошибка возникает как в Windows, так и в Linux:

java /home/mial/Welcome
Error: Could not find or load main class .home.mial.Welcome

Если в терминале вы находитесь в той же директории, что и файл, который вы запускаете, то не нужно указывать абсолютный путь. Например, нужно запускать так:

cd C:\
java Welcome

Если же вы находитесь в другой директории, то нужно использовать опцию -cp, после которой указать путь до каталога, где размещена запускаемая программа. А далее указать запускаемый файл без расширения .class:

java -cp C:\ Welcome

Как видно из скриншота, командная строка находится в папке C:\WINDOWS\system32. Файл, который нам нужно запустить, находится в папке C:\ (корень диска). Мы указываем после ключа -cp папку C:\, а затем пишем имя файла программы без расширения – Welcome.

Аналогично нужно поступать в Linux. Пример команды:

java -cp /home/mial/ Welcome

Ошибка Main method not found in class

Если при запуске вы столкнулись с ошибкой:

Error: Main method not found in class Welcome, please define the main method as:
   public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

Это означает, что вы не указали метод main, либо написали слово неправильно (например, Main вместо main).

Просмотр команды jar

Мы узнали, что можем использовать команду jar, поставляемую вместе с JDK, для проверки содержимого файла JAR:

$ jar tf stripe-0.0.1-SNAPSHOT.jar 
META-INF/
META-INF/MANIFEST.MF
...
templates/result.html
templates/checkout.html
application.properties
com/baeldung/stripe/StripeApplication.class
com/baeldung/stripe/ChargeRequest.class
com/baeldung/stripe/StripeService.class
com/baeldung/stripe/ChargeRequest$Currency.class

Если мы хотим отфильтровать выходные данные, чтобы получить только нужную нам информацию, например, имена классов или файлы свойств, мы можем передать выходные данные в инструменты фильтрации, такие как grep .

Команда jar довольно удобна в использовании, если в нашей системе установлен JDK.

Однако иногда мы хотим изучить содержимое файла JAR в системе без установленного JDK. В этом случае команда jar недоступна.

Мы посмотрим на это в следующий раз.

Решение ошибки «Невозможно получить доступ к файлам данных NLS или указана недопустимая среда» в клиентском средстве Oracle

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>style=»clear:both;»>

Он был установлен несколько дней назадNavicat for OracleЭтогоOracleПосле использования клиентского инструмента ошибок не было, пока я не установил его на компьютер в школьном компьютерном классе, и ошибка не появилась.Поначалу я подумал, что это те, которые нужны.dllЕсли файл не настроен, то написанные в предыдущем блогеdllЯ перенастроил файл и проверил его. Думаю, что все в порядке. Когда я снова открываю программу, ошибка все еще сохраняется. Кажется, теперь мне нужно выйти в Интернет, чтобы найти решение. После нескольких минут поиска, Я наконец нашел решение ошибки. Позвольте мне рассказать о решении:

Во-первых, когда вы используете этот инструмент для создания нового подключения и нажимаете кнопку «Проверка подключения», появляется следующая ошибка:

ORA-12705: Cannot access NLS data files or invalid environment specified 。

как показано на картинке:

Фактически, не только это программное обеспечение будет иметь эту ошибку, но и другие клиентские инструменты также могут иметь эту ошибку.Причина ошибки может заключаться в том, что в системе установлено что-то еще.OracleЧто касается версии, то есть проблема с настройкой реестра определенного элемента, и компьютер в школьном компьютерном классе установленOracle 9iСледовательно, эта версия базы данных вызывает вышеупомянутую ошибку. Решение очень простое, достаточно изменить реестр. Сначала вWindowsнажмиWin+RКомбинированные клавиши, чтобы открыть диалоговое окно запуска, введите «regedit»Command, откройте реестр и найдите следующие места по очереди:

\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE

Найти ключ »NLS_LANG»Этот ключ, этот ключ состоит изOracleСоздание стандартной клиентской установки, Ценность NA . Это то, что вызвало ORA-12705неправильная причина. Просто измени его значение(NV)изменить на «SIMPLIFIED CHINESE_CHINA.ZHS16GBK»Вот и все.

как показано на картинке:

Но сложно ли изменять этот способ каждый раз, поэтому мы пишем файл реестра, содержимое файла выглядит следующим образом:

Windows Registry Editor Version 5.00

”NLS_LANG”=”SIMPLIFIED CHINESE_CHINA.ZHS16GBK”

Сохраните этот файл как «Oracle.reg»Вот и все, в будущем вы можете изменить реестр, дважды щелкнув файл. Кстати, не забывайте, что вашdllКонфигурация файла, иначе будут другие ошибки.

Интеллектуальная рекомендация

1. Для реальных сигналов (для понимания): A (ω) является соотношением амплитуды выходного сигнала и амплитуды входного сигнала, называемого частотой амплитуды. Φ (ω) — это разница межд…

Один. вести Многие люди задавали некоторые вопросы о создании проекта Flex + LCDS (FDS) в сообщениях и группах. Из-за операции ее трудно четко объяснить, поэтому я написал простой учебник (я обещал эт…

package com.example.phonehttp; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.widget.ScrollView; import android.widget.TextView; public class MainActi…

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

тема: Объедините два упорядоченных слоя в новый заказанный список и возврат. Новый список состоит из всех узлов двух связанных списков, данных сплавным. Пример: Анализ: два связанных списка состоит в …

Вам также может понравиться

D. Самая ценная строка Пример ввода 2 2 aa aaa 2 b c Образец вывода aaa c На самом деле, будучи задетым этим вопросом, вы должны быть осторожны. После инвертирования строки, если две строки имеют один…

Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother to make the gray scale of each cell becomes the average gray scale (rounding down) of all the 8 surro…

calc () может быть очень незнакомым для всех, и трудно поверить, что calc () является частью CSS. Поскольку он выглядит как функция, почему он появляется в CSS, поскольку это функция? Этот момент такж…

Основываясь на дереве регрессии, сформированном CART, а также на предварительной и последующей обрезке дерева, код выглядит следующим образом:…

Откат Обновление в режиме онлайн с версии Centos (CentOS Linux версии 7.3.1611 (Core) до CentOS Linux версии 7.5.1804 (Core)) # ошибка соединения yum-ssh после обновления yexpected key exchange group …

Что такое APK?

Весь APK — это пакет приложения Android, который представляет собой пакет приложения Android. Обычно, когда мы устанавливаем приложение Android, нам нужно локально загрузить файл APK и установить его. Система Android распознает его как пакет приложения Android. Кроме того, следует отметить, что APK на самом деле является файлом, основанным на формате файла ZIP, поэтому вы можете распаковать его с помощью программного обеспечения для распаковки. После распаковки файла APK вы увидите следующие файлы:

  • .dex файл кода: это формат файла классов, скомпилированный DEX, используемый для основной части кода, работающей на виртуальной машине Dalvik;
  • ресурсы Файлы ресурсов: некоторые ресурсы, необходимые в программе Android, представленные каталогами ресурсов и ресурсов, например ресурсы изображений, ресурсы цвета, строки, макеты и т. д .;
  • Файл ресурсов: собственные файлы ресурсов, такие как шрифты, мелодии и т. Д., Хранятся в каталоге ресурсов.
  • Файл манифеста: файл манифеста Android, представленный AndroidManifest.xml. Файл манифеста предоставляет необходимую информацию о приложении для системы Android. Система должна иметь эту информацию, прежде чем она сможет запустить любой код приложения.

Разобравшись с APK, давайте познакомимся с инструментами, необходимыми для декомпиляции APK:

Использование команды jar

JDK поставляется с командой jar . Мы можем использовать эту команду с опциями t и f для перечисления содержимого файла JAR :

$ jar tf stripe-0.0.1-SNAPSHOT.jar 
META-INF/
META-INF/MANIFEST.MF
...
templates/result.html
templates/checkout.html
application.properties
com/baeldung/stripe/StripeApplication.class
com/baeldung/stripe/ChargeRequest.class
com/baeldung/stripe/StripeService.class
com/baeldung/stripe/ChargeRequest$Currency.class
...

Поскольку нас интересуют только файлы *.class в архиве, мы можем отфильтровать выходные данные с помощью команды grep :

$ jar tf stripe-0.0.1-SNAPSHOT.jar | grep '\.class$'
com/baeldung/stripe/StripeApplication.class
com/baeldung/stripe/ChargeRequest.class
com/baeldung/stripe/StripeService.class
com/baeldung/stripe/ChargeRequest$Currency.class
com/baeldung/stripe/ChargeController.class
com/baeldung/stripe/CheckoutController.class

Это дает нам список файлов классов внутри файла JAR.

9 ответов

Используйте JD GUI. Откройте приложение, перетащите файл JAR в него.

149

2011-02-24 16:08

Вы можете извлечь файл JAR с помощью команды:

Ссылки: документация Oracle JAR

50

2012-09-24 16:18

Я считаю, что это можно сделать очень легко. Вы всегда можете извлечь исходные файлы (файлы Java) из файла jar в zip.

Шаги, чтобы получить источники файла jar как почтовый индекс:

  1. Загрузите JAD с http://techieme.in/resources-needed/ и сохраните его на любом местоположение в вашей системе.
  2. Перетащите банку, для которой вы хотите источники на JAD.
    3 JAD UI откроется со всей структурой пакета в древовидном формате.
  3. Нажмите на меню «Файл» и выберите «Сохранить источники банок».
  4. Это сохранит источники в виде почтового индекса с тем же именем, что и банка.

Надеюсь это поможет.

Ссылка не работает по какой-то причине, поэтому добавьте ссылку, откуда вы можете скачать JDGUI

41

2013-05-19 08:20

Ваш JAR может содержать источник и javadoc, и в этом случае вы можете просто использовать чтобы извлечь их.

В противном случае вы можете использовать декомпилятор, как указано в ответе adarshr:

31

2011-02-24 16:17

Я знаю, что это старый вопрос Все еще думал, что это поможет кому-то

1) Перейдите в папку вашего файла JAR.

2) изменить его расширение на.zip.

3) Вы готовы пойти и можете легко извлечь его, просто дважды щелкнув по нему.

Примечание: я проверял это в MAC, он работает. Надеюсь, это будет работать и на Windows.

14

2014-02-12 12:26

Сделайте следующее в своем Linux-окне, где работает java (если вам нравится терминальный способ делать что-то)

ПРИМЕЧАНИЕ: как прокомментировал @Richard, «это может быть незаконным в зависимости от того, являетесь ли вы владельцем авторских прав на банку, страны, в которой вы живете, и вашей цели для этого».

4

2019-11-05 16:04

Шаги по получению исходных файлов jar-файла в виде zip-архива:

  1. Загрузите JD-GUI с http://java-decompiler.github.io/ и сохраните его в любом месте вашей системы.

  2. Перетащите jar или откройте файл .jar, для которого вы хотите, чтобы исходники находились на JD.

  3. Откроется Java Decompiler со всей структурой пакета в древовидном формате.

  4. Щелкните меню «Файл» и выберите «Сохранить источники jar». Он сохранит исходники в виде zip-архива с тем же именем, что и jar.

Пример:-

Мы можем использовать Eclipse IDE для разработчиков Java EE, а также для обновления / извлечения кода при необходимости.

В eclipse выберите Import Jar, а затем выберите jar, который вам нужен. Следуйте инструкциям на изображении ниже

1

2020-11-03 21:00

AndroChef Java Decompiler создает очень хороший код, который вы можете использовать непосредственно в своих проектах…

2014-05-03 02:59

-Конвертировать файл.jar в.zip (в Windows просто измените расширение)
-Разархивировать папку.zip -Вы получите полные файлы.java

-1

2017-05-12 18:37

Над инструментами достать банку. Также есть некоторые другие инструменты и команды для извлечения банку. Но AFAIK вы не можете получить код Java в случае, если код был запутан.

-1

2014-03-04 09:49

Предположим, что ваш JAR-файл находится в C:\Documents and Settings\mmeher\Desktop\jar, а имя JAR-файла — xx.jar, затем введите в командной строке две нижеуказанные команды:

1> cd C:\Documents and Settings\mmeher\Desktop\jar

2> jar xf xx.jar

-4

2014-01-31 11:18

Дополнительная информация о формате JAR

Если вам нужна помощь в упаковке программ в файлы JAR, перейдите по этой ссылке для получения инструкций на веб-сайте Oracle.

Только один файл манифеста может быть включен в архив JAR, и он должен находиться в расположении META-INF/MANIFEST.MF. Он должен следовать синтаксису имени и значения, разделенных двоеточием, как Manifest-Version:1.0. Этот файл MF может указывать классы, которые должно загружать приложение.

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

5 ответов

Решение

Если вы действительно получили исходный код продукта и все, что у вас есть, это JAR-файлы, то JAR-файлы (которые на самом деле являются ZIP-файлами с другим файловым суффиксом и определенным видом «манифеста») должны содержать кучу файлов с суффиксом «.java». Вы должны быть в состоянии проверить это с помощью любого инструмента ZIP архива.

Если в JAR-файлах нет файлов «.java» (например, только много «.class» и других файлов), у вас нет исходного кода продукта. Вносить изменения будет действительно очень сложно, учитывая, что вы не Java-разработчик.

Предполагая, что вы делаете это законно (то есть с явного или неявного разрешения разработчика продукта), вы сэкономите много времени, если сможете также воспользоваться инструкциями по сборке продукта. Например, если он собран с использованием Ant, вы хотите файл (ы) build.xml.

9

2010-07-04 01:04

Jar-файл аналогичен zip-файлу, поэтому он может содержать или не содержать исходный код, необходимый для разработки. Вы можете прочитать о jar-файлах здесь.

9

2010-07-03 14:25

Обычно вы упаковываете.class (скомпилированные) файлы и распространяете их в.jar-файлах, но можно поместить любой тип файла (включая исходный код) в архив.jar. Если вам нужно изменить код в библиотеке, вам нужно увидеть исходный код.

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

5

2010-07-03 14:27

Любая современная Java IDE позволяет вам вставлять файлы JAR и использовать их в качестве кода библиотеки. Это не требует исходного кода и т. Д. Затем вы можете разработать новый код, который включает в себя изменения.

Если вам нужно изменить код внутри jar-файлов, вам было бы намного лучше иметь исходный код для jar-файла, который необходимо обновить, а затем работать с этим.

Если у вас нет исходного кода, и вам нужно изменить класс, вы можете декомпилировать этот класс, используя, например, JAD, в файл Java (будьте осторожны, могут содержать ошибки), а затем работать с этим. Вам просто нужно иметь этот класс перед jar в пути к классам (если только jar не запечатан, и тогда у вас есть совершенно новый вопрос для stackru).

У вас есть более опытные Java-программисты в вашей команде, вы можете обратиться за помощью?

2

2010-07-03 14:35

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

Однако jar-файлы могут помочь вам, если они содержат некоторые библиотеки / пакеты / классы, которые вы считаете необходимыми для проекта, над которым вы работаете. Таким образом, вы можете добавить их в путь компиляции, если вы используете IDE Netbeans, и использовать их, даже не заглядывая в источник. Однако это будет работать лучше всего, если вы делаете какую-то пошаговую разработку своего проекта. Таким образом, это сильно зависит от того, как вы создаете свое программное обеспечение, т. е. является ли оно инкрементным, или, возможно, вы захотите изменить то, что получили… для последнего вы можете рассмотреть вопрос о декомпиляции или запросе исходного кода.

2010-07-03 16:13

Установка Apktool на MAC

1, вОфициальная ссылка на сайтНайдено здесь следующим образом:В основном следуйте вышеупомянутым 6 шагам, чтобы быть в порядке. Первым шагом является загрузка сценария оболочки, сохраненное имя «apktool», не используйте суффикс .sh. Это может быть скопировано в sublimetext и затем сохранено.2. Загрузите последнюю версиюapktool-2На битбакете:3. Переименуйте загруженный файл jar в «apktool.jar».4. Поместите сценарии оболочки «apktool» и «apktool.jar» в каталог «/ usr / local / bin»5. Увеличьте права на выполнение этих двух файлов, chmod a + x file6. Выполнить оболочку apktool.После установки вы можете запустить apktool -v для просмотра информации о версии:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: