2011-07-06 194 views
10

我有一個myfile.jar文件。 我使用jd-gui來反編譯myfile.jar文件夾中的所有* .class。我在許多文件夾中獲得許多* .java文件重新編譯爲* .Jar反編譯並修復代碼後?

修復了某些* .java中的某些代碼之後,現在我想將所有* .java重新編譯回* .class,並將整個文件夾打包回myfile.jar 。

我該怎麼做?

(這是我第一次用Java代碼玩。)

+0

此外,請確保在您居住的地方進行類似此類事情(分別由您在獲得jar文件時同意的許可證)時確實是合法的。 –

+0

非常感謝您的幫助,這只是我試圖解決一些錯誤的免費應用程序。 – sandy

+2

爲什麼你會下注。 CRAZIES –

回答

1

在一般情況下,Java代碼編譯成類你需要的javac可執行文件自帶的JDK。

的Unix:

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

的Windows:

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

一旦你編譯的代碼,你可以創建JAR(這是一個包含所有類和一些超常一個zip文件關於創建者的數據,版本等等)。

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

你可以閱讀更多關於你可以用javacjar使用不同的選項。使用像螞蟻這樣的工具可以更容易地編譯源代碼並創建罐子。請參閱javacjar任務。

+0

謝謝,我可以用什麼javac命令編譯多個* .java到* .class包含子文件夾中的一個? – sandy

+0

@sandy:使用shell通配符,就像在我的答案中一樣。 –

8

您需要Java開發工具包(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文件。 JDK中包含jar工具。

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

(你也可以簡單地使用你的信心zip程序,並重新命名生成的ZIP文件的.jar。如果你的文件有非ASCII名稱,確保文件名編碼設置爲UTF-8。 )