Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create native binaries for your Java app? [duplicate]

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?

like image 668
Ariejan Avatar asked May 03 '11 12:05

Ariejan


People also ask

Can you compile Java to binary?

Native Image is a technology to compile Java code ahead-of-time to a binary – a native executable. A native executable includes only the code required at run time, that is the application classes, standard-library classes, the language runtime, and statically-linked native code from the JDK.

Can Java be compiled to native code?

Yes! Native Image The native image feature with the GraalVM SDK helps improve the startup time of Java applications and gives them a smaller footprint. Effectively, it's converting bytecode that runs on the JVM (on any platform) to native code for a specific OS/platform — which is where the performance comes from.

Can you compile Java into EXE?

Package your Java application as a jar, and Executor will turn the jar into a Windows exe file, indistinguishable from a native application. Simply double-clicking the exe file will invoke the Java Runtime Environment and launch your application.


3 Answers

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.

like image 58
Lawrence McAlpin Avatar answered Oct 13 '22 00:10

Lawrence McAlpin


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.

like image 27
Anthony O. Avatar answered Oct 13 '22 01:10

Anthony O.


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

like image 32
Suresh Kumar Avatar answered Oct 13 '22 00:10

Suresh Kumar