在生成的运行时中包含java.exe

在生成的运行时中包含java.exe,java,javafx,packaging,Java,Javafx,Packaging,为了为我的javafx应用程序创建安装程序,我遵循了以下步骤。正如预期的那样,它使安装程序 它的目录结构如下所示: MyApp +app +runtime +MyApp.exe +MyApp.ico 运行时包含Java运行时。但问题是,我的应用程序创建了一些Java进程,它需要Java.exe的路径。但在浏览上述文件夹运行时时,它不包含java.exe i、 e 运行时 +jre +bin +java.dll missi

为了为我的javafx应用程序创建安装程序,我遵循了以下步骤。正如预期的那样,它使安装程序

它的目录结构如下所示:

MyApp

  +app

  +runtime

  +MyApp.exe

  +MyApp.ico
运行时包含Java运行时。但问题是,我的应用程序创建了一些Java进程,它需要Java.exe的路径。但在浏览上述文件夹运行时时,它不包含java.exe

i、 e

运行时

+jre

    +bin

         +java.dll

          missing java.exe
如何获取java.exe的路径,以便我可以使用它启动其他java进程。或者如何从
java.dll
启动java进程

PS:link讨论了相同的问题,但没有回答。

Oracle Java部署团队提供的指南包含如何自定义要包含在自包含应用程序中的JRE片段的说明

我将在此处复制并粘贴相关部分,以防原始链接失效:

如果您使用打包工具来生成可安装的包,则可能需要在将应用程序映像打包到安装程序之前对其进行调整。为什么?例如,您可能希望对应用程序进行签名,以使其看起来不受操作系统的信任(例如取悦Mac OS X Gatekeeper)

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

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

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

下面是示例脚本(由John Petersen提供),您可以使用它在Windows平台上将jre/lib/ext/sunjce_provider.jar添加到MyApp的应用程序包中。使用Javascript编写脚本,但也可以使用VBScript编写Windows脚本



您必须打包一个JNI应用程序才能使用dll并启动新的可执行文件.Nope。他们确实有办法在运行时包含java.exe。我发现thta solutionOkay将标签更新为javax和packaging。这不是真正的java问题,您可以添加关于如何创建打包的更多细节。在windows环境中,javapackager将在ROOTFOLDER/package/windows中查找名为YOURAPP-post-image.wsf的wsf(windows脚本文件)文件。您可以在那里复制java可执行文件。
<?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>