10

I'm wondering how to package a Java application into a native binary for Windows, Linux and Mac OS X.

I know Minecraft does this, but I can't figure out how. This is what'd I'd like to do:

  • From NetBeans (preferably) or Eclipse, build the three binaries automatically.
  • Include native libraries for OpenGL et. all.
  • Obfuscate my code if possible.

If there's some way to mimic the Minecraft auto-updater feature, that'd be totally awesome.

So, are there any tools available to do this for you, or do I need to write a large bulk of XML to accomplish this?

Ariejan
  • 10,910
  • 6
  • 43
  • 40
  • do you simply want to wrap your *.jar* inside a binary, like what *launch4J* does or do you want an "AOT compiler" like *Excelsior JET* that does *really* produce a self-sufficient binary and, hence, doesn't need a JRE to run anymore? (btw regarding obfuscation, I use *Proguard* and it cannot hurt) – SyntaxT3rr0r May 03 '11 at 14:37
  • You could use [Robovm](https://github.com/robovm/robovm) but it will only work for Linux applications. With the Windows Subsystem for Linux, you'd only miss OSX support. – Janus Troelsen May 12 '16 at 15:50

5 Answers5

6

To make a native binary for Windows, you would use a tool like Launch4J. On OSX you could use JarBundler. Minecraft simply distributes the jar file for Linux. I'm not aware of a native binary packager for Linux.

You could also compile your Java code via GCJ but that's probably not what you want, as there are limitations and compatibility concerns there. The native bundlers like Launch4j and JarBundler simply wrap your jar file and use a real JRE to execute it.

As for integrating with NetBeans or Eclipse, you'll probably have to write your own ant build file, especially since the solution varies from one platform to the next.

Lawrence McAlpin
  • 2,745
  • 20
  • 24
4

If you are using Java 9, you can also use Java 9 Modularization & jlink to ship a zero-dependency native app.

There is also maven-jlink-plugin that could help here.

Anthony O.
  • 22,041
  • 18
  • 107
  • 163
1

Take a look at GCJBuilder plugin for eclipse. Not sure if it supports cross compilation as the command GCJ compiler does.

Suresh Kumar
  • 11,241
  • 9
  • 44
  • 54
  • This is the only valid answer I found. The question clearly talks about creating NATIVE BINARIES, and not a wrapper for invoking the JVM. – progyammer Oct 28 '18 at 19:48
0

If the app. has a GUI and can be distributed from a web site, look into Java Web Start. JWS is supplied by Oracle, and provides auto-update amongst many other features.

Note that JWS uses Jar files, so no conversion is necessary.

Community
  • 1
  • 1
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
0

I've used JSMooth for this in the past: http://jsmooth.sourceforge.net/ As mentioned before, this wrapper just looks for a real JRE to run it - it does not come with a bundled JRE.

Jeroen Baert
  • 1,273
  • 2
  • 12
  • 28