在运行时构建中包含java.exe

时间:2013-05-21 11:40:05

标签: java javafx packaging

要为我的javafx应用程序创建安装程序,我已关注tutorial。正如预期的那样使安装程序。

它的目录结构如下:

  

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链接讨论相同的问题,但没有回答。

1 个答案:

答案 0 :(得分:4)

Oracle Java部署团队的Native Packaging Cookbook on Fine Tuning the Application Bundle包含有关如何自定义要包含在自包含应用程序中的JRE部分的说明。

我只是复制并粘贴相关部分,以防原始链接失效:

  

如果您使用打包工具生成可安装程序包,则可能需要在将应用程序映像打包到安装程序之前对其进行调整。为什么?例如,您可能想要对应用程序进行签名,因此它似乎对操作系统不可信(例如,为了取悦Mac OS X Gatekeeper)。

     

默认情况下,自包含应用程序不包含Java Runtime的完整副本。我们只包含一组强制性组件。采用这种方法的部分原因是我们希望减小封装尺寸。但是,在某些情况下,您的应用程序可能依赖于这些可选组件,在这种情况下,您需要一种方法将它们添加到私有运行时。例如,如果缺少jre / lib / ext / sunjce_provider.jar,则https连接将不起作用。

     

目前,这可以通过提供在填充应用程序映像后执行的自定义配置脚本来实现。与上面带有图标的示例一样,您需要启用详细输出以查找脚本文件的名称,然后将其放到打包工具将找到它的位置。请注意,脚本语言也是特定于平台的。目前我们只在Windows上支持Mac / Linux和Windows脚本的shell。

     

您如何找到应用程序图像的位置?目前,自定义脚本在存储配置文件的目录中运行,但可以使用相对平台特定路径访问应用程序映像。您可以从详细输出或通过将环境变量JAVAFX_ANT_DEBUG设置为true来获取此路径,以保留中间构建工件。

     

以下是示例脚本(由John Petersen提供),您可以使用它将jre / lib / ext / sunjce_provider.jar添加到Windows平台上的MyApp应用程序包中。脚本使用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> 

上面讨论了将sunjce_provider.jar文件从JRE安装复制到应用程序包,但复制任何其他文件(包括java.exe)的过程应该类似。

有关如何最初创建要自定义的包的详细信息,请参见JavaFX Deployment Guide