2009-12-28 79 views
0

我正在修改一個java程序,它是在2004年使用J2re1.4.2_03中的javaw.exe編寫的。如何找出原來的jdk版本

問題: 有沒有辦法找出一個程序員用來編譯java文件的JDK編譯器?

backstory: 我用jdk5的javac重新編譯了java文件。 我用j2re1.4.2_03中的javaw.exe運行它,它給了我一個彈出錯誤「找不到主類,程序將退出。」

從一些谷歌搜索,錯誤消息意味着用更老的javac.exe編譯的類 如果我用jdk5的javaw.exe運行它,沒有錯誤。

我想避免重新編譯所有的類文件,因爲我沒有完全重新編譯原始java文件。

有沒有辦法解決這個問題或找出原始程序員用來做這件事的編譯器?或者其中一個提前

+0

有沒有源代碼必須與簽名的方法:' public static void main(String [] args)'??你在調用這個類嗎? – OscarRyz 2009-12-29 00:09:22

回答

1

感謝工作得更好,我不太清楚您的具體問題是什麼。

如果您想知道如何找出某個類文件的Java版本,可以讀取類文件的頭文件。你可以看到信息here,並且有工具可以檢查你的文件。

您通常應該避免將由不同編譯器編譯的類文件放在一起。有一些方法可以解決它,但是你會進入classpath。新的Java文件是否與舊版本兼容(例如,沒有泛型?)。您始終可以從Sun獲得較舊的編譯器,並使用該編譯器編譯新的文件。

1

從一些google搜索,錯誤消息意味着有更老的javac.exe

編譯的類我敢肯定這不是它。使用較舊的編譯器編譯的類文件在新的JVM下運行得很好,而且我從來沒有遇到過來自不同編譯器的混合類文件的問題;類文件格式被指定得非常緊密。

我懷疑你唯一需要做的就是用-target 1.4選項編譯你的新代碼(或者使用1.4編譯器),以便生成1.4 JVM能夠理解的類文件。

或者,只需使用1.5 JVM運行該程序 - 最有可能的是它將毫無問題地運行。

0

關於你的元信息問題:有時你會得到一些環境信息,當你解壓縮jar和看看/META-INF/MANIFEST.MF文件。

0

爲什麼不下載jdk 1.4並使用它編譯文件?多個jdk版本可以在任何pc或服務器上共存,只需確保運行正確的javac。

0

簡單的答案是「否」。根據JVM specification,類文件中唯一的版本信息是類格式主版本號和次版本號。這些告訴你目標JVM版本,而不是Java編譯器版本。(理論上講,在類文件中有一些未公開的「屬性」中存在Java編譯器版本信息,但如果javap命令沒有顯示它,我不知道如何找到它。)

@manuel指出,如果你的類在JAR文件中,JAR文件清單可能包含版本信息。但是,這將是用於創建JAR文件的jar命令的版本信息,並且不能保證用於編譯的Java編譯器具有相同的版本。 (或者甚至是使用了Sun編譯!)

然而,我與其他人誰說,這可能不是你的問題的根源達成一致,