You can add a post-image script to your javapackager build to manually add the
java.exe into your application. If you search the output from the javapackager
for “post-image” I think it will tell you what file to create and where to put
it. Here is a post-image file that I use to move java.exe into my native app on
Windows:
MyApp-post-image.wsf:
<?xml version="1.0" ?>
<package>
<job id="postImage">
<script language="JScript">
<![CDATA[
var oFSO = new ActiveXObject("Scripting.FileSystemObject");
var oFolder = oFSO.getFolder(".");
var from = "C:\\Program Files\\Java\\jdk1.8.0_40\\bin\\java.exe";
var to = oFolder.path + “\\MyApp\\runtime\\bin";
if (!oFSO.FolderExists(to)) {
oFSO.CreateFolder(to);
}
to += "\\";
oFSO.CopyFile(from, to);
]]>
</script>
</job>
</package>
On MacOS, I just build a native “image” as opposed to a .dmg. So it’s easy to
add the java binary in an external script (I do some codesign stuff there as
well, which has to happen after I modify the native package).
Jeff Martin
214.513.1636
> On Aug 8, 2015, at 6:16 PM, Scott Palmer <[email protected]> wrote:
>
> I’m using the JavaFX gradle plugin to build a very simple application with
> the new java packager and I’ve noticed a problem with the embedded JRE, at
> least on OS X.
>
> Specifically, the ‘bin’ folder is missing from the embedded JRE, presumably
> because the embedded launcher replaces it.
> However my application (and many others) needs to launch a new java process.
> Part of the reason for doing so is so it can be launched with new JVM options
> that are determined at runtime. For example modifying the java.library.dir
> after finding “plugins” that have native code.
>
> Now it fails when running from the app bundle (works fine from a command
> line). The problems is that it fails to launch a new ‘java’ process because
> it expects to find 'bin/java' in the JRE folder.
>
> What is the solution?
>
> Since I’m using Gradle, I’m thinking I could tweak things to copy the JRE bin
> folder into the xxxx.app/Contents/PlugIns/Java.runtime/Contents/Home/jre/
> folder, but really the javapackager should have an option to include the
> “full” JRE.
>
> Or perhaps we need a new API in Java 9 to support launching a new Java
> process?
>
>
> Regards,
>
> Scott
>
>