web-dev-qa-db-ja.com

コードを逆コンパイルして修正した後、*。Jarに再コンパイルしますか?

Myfile.jarファイルがあります。 jd-guiを使用して、myfile.jar内のフォルダー内のすべての* .classを逆コンパイルします。多くのフォルダに多くの* .Javaファイルがあります

* .Javaのコードを修正した後、すべての* .Javaを* .classに再コンパイルし、フォルダー全体をmyfile.jarにパックします。

どうすればよいですか?

(Javaコードで遊ぶのはこれが初めてです。)

13
sandy

Java Development Kit(JDK)が必要です。これには、Javaコンパイラ(通常はjavacという名前)とjarアーカイバが含まれます。

Javaファイルがディレクトリ名srcにあると仮定すると(パッケージ構造に応じて)、次のようになります。

javac -d classdir -sourcepath src src/*.Java src/*/*.Java src/*/*/*.Java ...

すべてのファイルをコンパイルします。 (*の数をディレクトリレベルの数に調整します。ソースファイルを含むフォルダがいくつかある場合は、それらを個別に一覧表示することもできます。一部のクラスが他のクラスに依存している場合は、他のクラスを省略できます。コンパイラは、それらを自動的にコンパイルします。)

プログラムに外部ライブラリが必要な場合は、これらに-classpath引数を指定してください。

これで、ディレクトリclassdirにすべてのコンパイル済みクラスができました。元のjarファイルを調べます。そこにある非クラスファイルも、classdirにコピーする必要があります(以前と同じ相対ディレクトリにあります)。これには、特にMETA-INF/MANIFEST.MFが含まれます。

次に、これらから新しいjarファイルを作成します。 jarツールはJDKに含まれています。

jar cfm mypackage.jar classdir/META-INF/MANIFEST.MF -C classdir .

(自信を持ってZipプログラムを使用し、結果のZipファイルの名前を.jarに変更することもできます。ファイルの名前がASCII以外の場合は、ファイル名のエンコードをUTF-8に設定してください。)

10
Paŭlo Ebermann

一般に、Javaコードをクラスにコンパイルするには、JDKに付属のjavac実行可能ファイルが必要です。

Unix:

${Java_HOME}/bin/javac -d OUTPUT_DIRECTORY SOURCE_FILES

ウィンドウズ:

%Java_HOME%\bin\javac.exe -d OUTPUT_DIRECTORY SOURCE_FILES

コードをコンパイルしたら、jarを作成できます(これは、すべてのクラスと、作成者、バージョンなどに関するいくつかのメタデータを含むZipファイルです)。

${Java_HOME}/bin/jar cf output.jar INPUT_FILES

javac および jar で使用できるさまざまなオプションの詳細を読むことができます。 antのようなツールを使用すると、ソースコードのコンパイルとjarの作成が簡単になります。 javac および jar タスクを参照してください。

2
Moe Matar