GreenJVMMake 是一個(gè)精簡(jiǎn)JRE的小工具,詳細(xì)信息請(qǐng)參見項(xiàng)目:
http://code.google.com/p/greenvm/
javaonepackage 是一個(gè)集成了GreenJVMMake的IDE,可以方便的生成自定義的JRE,詳細(xì)信息請(qǐng)參見項(xiàng)目:
http://code.google.com/p/javaonepackage/
比較遺憾的是javaonepackage的作者遺失了代碼,導(dǎo)致項(xiàng)目無法進(jìn)一步的更新,影響了使用。
用以上工具生成的精簡(jiǎn)JRE通常不超過2M,可是用exe4j將Java應(yīng)用轉(zhuǎn)換成exe的時(shí)候,卻會(huì)拋出Couldn't load main class,原因是因?yàn)閑xe4j使用自己的jar來加載用戶的Jar包,這其中用到了一些反射機(jī)制,精簡(jiǎn)JRE里面當(dāng)然是不含有多余的class文件的,所以加載必然失敗。我們需要做的就是把這些相關(guān)的class添加到精簡(jiǎn)JRE中,這些class包含在 java\lang, java\util, sun\reflect 這三個(gè)包中。將這些class添加到精簡(jiǎn)jre中,大小也僅僅增加數(shù)百K而已,在我們可以的接受范圍之內(nèi)。
PS:由于GreenJVMMake的機(jī)制是檢查運(yùn)行時(shí)加載的class文件,所以它很可能遺失Jar運(yùn)行所需要的exception class,這會(huì)導(dǎo)致運(yùn)行時(shí)JVM的崩潰,用戶需手動(dòng)加載所有可能會(huì)產(chǎn)生的exception class,包含runtime的和非runtime的。