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 <swpal...@gmail.com> 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
> 
> 

Reply via email to