2010-03-04 93 views
3

我覺得這很容易。我下載了JDK,提取了src.zip,修改了JDK以適應我的需要並保存了文件。如何重新編譯Java運行時環境(JRE)?

現在,我唯一需要做的就是重新編譯提取並更新src文件夾到「JRE」。我嘗試使用javac,但沒有得到任何地方。例如,我收到沒有給出源文件的錯誤。我明顯不使用正確的語法來編譯JRE。

那麼,有誰能告訴我,如何根據從JDK中提取的新源文件夾得到一個包含修改的Java運行時環境的工作「JRE」文件夾?

注意:我不會重新分配編譯。它僅供個人自用。

更新:感謝一個答案和http://www.javalobby.org/java/forums/t103334.html我得到了以下命令:"c:\tmp\jdk1.6.0_17\bin\javac" -classpath "c:\tmp\out" -verbose -g -d "c:\tmp\out" -J-Xmx512m -cp "c:\jdk1.6.0_17\jre\lib\rt.jar";"c:\jdk1.6.0_17\lib\tools.jar" @files.txt - 不幸的是,雖然它似乎處理的東西,當完成輸出文件夾/ out是空的。我的命令有問題嗎?

在此先感謝。

回答

2

將您的類路徑設置爲解壓縮源目錄的頂部。編譯這些文件,然後將它們的.class文件放回到rt.jar中。

+0

用你的建議和http://www.javalobby.org/java/forums/t103334.html我得到了以下命令:「c:\ tmp \ jdk1.6.0_17 \ bin \ javac」-classpath「c:\ tmp \ out「-verbose -g -d」c:\ tmp \ out「-J-Xmx512m -cp」c:\ jdk1.6.0_17 \ jre \ lib \ rt.jar「;」c:\ jdk1.6.0_17 \ lib \ tools.jar「@ files.txt - 不幸的是,雖然它似乎處理的東西,當完成輸出文件夾/ out是空的。我的命令有問題嗎? – Tom 2010-03-04 21:24:42

0

Sun's license

Java技術限制。您不得創建,修改或更改授權的行爲,或授權您的許可證持有者創建,修改或更改以任何方式標識爲「java」,「javax」,「」的類,接口或子包的行爲,太陽「或Sun在任何命名約定中指定的類似約定。

換句話說,您不允許以任何形式重新分配JVM的修改副本。如果你想這樣做,你需要聯繫Sun獲得許可。編輯: @湯姆霍金是正確的;這隻適用於Sun的官方「香草」JRE,即一個最終用戶已經安裝在他們的計算機上。

+0

。還有JRL和JIUL許可證。 – 2010-03-04 20:23:32

+1

這不會是一個問題,因爲我不會重新分配編譯。更新我的問題以反映這一點。 – Tom 2010-03-04 20:32:38

1

例如,我得到了錯誤,沒有源文件中給出。

你必須告訴javac的大約每java文件中要編譯。 javac告訴你,你沒有提供任何文件來編譯。

+1

有趣。但是,我現在不知道如何結束工作的JRE。例如,如果我修改了String.java文件,那麼如何才能最終生成一個反映對String.java所做更改的工作JRE文件夾? – Tom 2010-03-04 20:35:58

2

由於許多這些類在內部使用專有類,如com.sun.*,當然還有native方法,所以您將無法編譯整個Sun/Oracle JDK,並且這些的來源不包括在JDK中。你必須通過一個特殊的source code release或者使用OpenJDK來獲取它們(我不知道讓本地的東西工作是微不足道的還是令人難以忍受的)。或者,也可以選擇性地僅重新編譯特定的類 - 但當然只有當您不以與JDK中的現有用法不兼容的方式進行更改時纔可能。

0

而不是

"c:\tmp\jdk1.6.0_17\bin\javac" -classpath "c:\tmp\out" -verbose -g -d "c:\tmp\out" -J-Xmx512m -cp 

嘗試以下操作:

set path=C:\tmp\jdk1.6.0_17\bin 

打回車鍵,您的計算機上,然後爲類以下

C:\tmp>set classpath=. 

又打回車鍵在你的電腦鍵盤上 然後編譯

C:\tmp>javac YourProgramName.java 

,除非它是OpenJDK的運行程序

C:\tmp>java YourProgramName