2013-05-21 43 views
4

要爲我的javafx應用程序創建安裝程序,我已遵循tutorial。正如預期的那樣,使安裝程序。在構建的運行時中包含java.exe

的目錄結構它使是這樣的:

MyApp的

+app 

    +runtime 

    +MyApp.exe 

    +MyApp.ico 

運行時包含Java運行時環境。但問題是,我的應用程序創建了一些Java進程,它需要java.exe的路徑。但瀏覽上面的文件夾運行時,它不包含java.exe。

運行

+jre 

    +bin 

     +java.dll 

      missing java.exe 

如何獲得的java.exe的路徑,這樣我可以用它來啓動其他Java進程。或者如何從java.dll開始java進程?

PS:This鏈接討論相同的問題,但不回答它。

+0

您必須創建一個JNI應用程序才能使用該dll並啓動新的可執行文件。 – Jayan

+0

不是。他們確實有辦法在運行時包含java.exe。我正在尋找解決方案 – Jatin

+0

好的,將標籤更新爲javax和包裝。這不是真的java問題 – Jayan

回答

2

Oracle Java部署小組的Native Packaging Cookbook on Fine Tuning the Application Bundle包含有關如何自定義要包含在自包含應用程序中的JRE部分的說明。

我只是複製並粘貼此相關的部分的情況下,原來的鏈接去死:如果您使用的包裝工具製作的安裝包

有可能是一個需要調整圖像的應用然後將其包裝到安裝程序中。爲什麼?例如,您可能需要對應用程序進行簽名,因此它似乎對操作系統不可信(例如,請取消Mac OS X Gatekeeper)。

默認情況下,自包含應用程序不包含Java運行時的完整副本。我們只包含一組強制性組件。採取這種方法的部分原因是我們想要減小包裝尺寸。但是,在某些情況下,您的應用程序可能依賴於這些可選組件,在這種情況下,您需要一種方法將它們添加到專用運行時。例如,如果缺少jre/lib/ext/sunjce_provider.jar,https連接將不起作用。

目前這可以通過提供在填充應用程序映像後執行的自定義配置腳本來實現。就像上面帶有圖標的示例一樣,您需要啓用詳細輸出來查找腳本文件的名稱,然後將其放到打包工具可以找到它的位置。請注意,腳本語言也是平臺特定的。目前我們只在Windows上支持Mac/Linux和Windows Script的shell。

如何找出應用程序映像的位置?目前,自定義腳本運行在存儲配置文件的目錄中,但可以使用相對平臺特定的路徑訪問應用程序映像。您可以從詳細輸出或通過將環境變量JAVAFX_ANT_DEBUG設置爲true來導出此路徑以保留中間構建工件。

下面是示例腳本(貢獻的約翰·彼得森),你可以用它來的jre/lib/ext目錄/加把sunjce_provider.jar到MyApp的的Windows平臺上的應用程序包。腳本使用Javascript,但你也可以使用VBScript for Windows腳本。

<?xml version="1.0" ?> 
<package> 
    <job id="postImage"> 
    <script language="JScript"> 
    <![CDATA[ 
     var oFSO = new ActiveXObject("Scripting.FileSystemObject"); 
     var oFolder = oFSO.getFolder("."); 
     var from = oFolder.path + "\\MyApp\\app\\sunjce_provider.jar"; 
     var to = oFolder.path + "\\MyApp\\runtime\\jre\\lib\\ext"; 
     if (!oFSO.FolderExists(to)) { 
      oFSO.CreateFolder(to); 
     } 
     to += "\\"; 
     oFSO.CopyFile(from, to); 
    ]]> 
    </script> 
    </job> 
</package> 

上面討論複製從JRE安裝到應用程序包,但用於複製任何其他文件,包括java.exe應該是相似的程序sunjce_provider.jar文件。

有關如何初始創建要定製的包的詳細信息,請參閱JavaFX Deployment Guide