2012-07-15 118 views
0

我對java編譯器的理解遇到了一些問題。將.java編譯爲.class編譯

如果你知道我的世界,你可能知道遊戲中有很多mods,它們是一些修改後的類,它們被注入原來的.jar中,替換舊的(original).class,問題是如果你想要要使用兩個不同的mod來代替同一個.class,這是不可能的,除非你混合了他們兩個的代碼並做一些版本。

嗯,我得到了兩個mod,它們使用相同的.class並反編譯這兩個類(反編譯都是SUCCESSFUL),分析,修改並創建了一個同時適用於兩個mod的.java文件。我現在的問題是,我必須將這個.java重新編譯爲.class文件,以便我可以注入到minecraft .jar中,但是每次我嘗試編譯它時,都會遇到很多錯誤,例如class, interface, or enum expectedselection does not contain main type這些錯誤因爲代碼提到了很多外部類,並且確實不包含main類型。

我想知道是否有人知道是否有必要將.java翻譯成.class二進制文件,忽略之前提到的所有錯誤,或者如果您有任何其他建議我該怎麼做。

PS:這段代碼不是一個完整的程序,這就是爲什麼我得到這些錯誤,它會在.jar中完美工作,請不要回答,它是毫無意義的編譯這個文件。

+1

因此,只需將原始jar文件(和必需的jar文件)添加到類路徑中進行編譯,然後使用類似winrar的東西來替換jar文件中創建的類。 – 2012-07-15 04:11:24

+0

感謝您的快速回復,但是如何將jar添加到javac的類路徑中? – Kasama 2012-07-15 04:15:48

+0

@Kasama'javac -classpath jarfile1.jar:jarfile2.jar:jarfile3.jar :. ClassToCompile.java'。 (注意:如果這是在Windows上,使用';'而不是':'。) – ruakh 2012-07-15 04:19:38

回答

1

我想知道如果你們知道反正還挺的.java轉換成一個.class二進制文件忽略所有的錯誤...

這是不可能的。如果Java源代碼中存在錯誤,則不能「強制」編譯Java源代碼,而且聽起來這就是問題所在。

  • Java反編譯器生成非有效Java源代碼的輸出並不罕見。

  • 如果您在「分析,修改,創建」過程中犯了錯誤,那麼您的源代碼可能無效......特別是如果您看起來沒有Java編程經驗。


如果您發佈的實際源代碼片段,以及實際編譯錯誤,我們也許能夠提供幫助。


隨訪

我具備Java編程經驗,它只是我使用Eclipse編譯的東西對我來說,所以我從來沒有通過命令行使用javac。

這不是問題所在。如果您嘗試使用Eclipse編譯此代碼,則會遇到同樣的問題。

如果無法重新編譯帶有錯誤的類,我可以編輯一個類中的類。jar與一些解壓縮反編譯的程序,顯示代碼,以便我可以再次編輯和打包它?

理論上,是的。在實踐中,你需要很好地理解字節碼以及編譯代碼的工作方式,才能夠實現這一點。特別是,如果你弄錯了,你可能會在課堂加載時遇到神祕的例外情況。

輸入類被混淆的事實部分解釋了爲什麼反編譯器難以生成可編譯的代碼。

+0

我有使用java編程的經驗,只是我使用Eclipse爲我編譯東西,所以我從不使用命令行使用javac。 如果無法重新編譯帶有錯誤的類,我可以使用解壓縮反編譯的某個程序編輯.jar中的類,顯示代碼以便我可以再次編輯和打包它? 但我想我找到了一種使用minecraft編碼器包(mcp50)的方法,現在我只需要知道被混淆的bg.class代表的.java文件。無論如何感謝=) – Kasama 2012-07-15 04:58:56