views:

128

answers:

6

As asked and answered here, python has a useful way of deployment without installers. Can Java do the same thing?

  • Is there any way to run Java's jar file without installing jre?
  • Is there a tool something like java2exe (win32), java2bin (linux) or java2app (mac)?
A: 

You might be able to get some luck with GCJ - haven't tried it myself.

Noel M
That will never work.
TheLQ
A: 

you can embbed the JRE inside your application and create a setup or installation for your application.

mohammad shamsi
"Why is this simple calculator app 26 MB?"
TheLQ
+2  A: 

You can use Launch4j for this. Well documented and easy to use. While the resulting program still needs a JRE to run, you don't have to install the JRE on the target system. You can just copy it with your application and tell Launch4j were to find it or just wrap it up with everything else.

haffax
@haffax : Where are the JRE file(s)? With Mac I found /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/*, and with PC I found Java/jre6/lib. Do I have to copy all those files?
prosseek
You need to copy the two subdirs jre6/lib and jre6/bin retaining the subdir structure. And tell Launch4j where to find it, best as a relative path from the executable's dir. Personally I put the bin and lib dirs in a subdir called jre next to my executable.
haffax
A: 

You can have a look at

http://www.bearcave.com/software/java/comp_java.html

You might get it what you want.

Anindya Chatterjee
A: 

You might want to check out how Eclipse does it - it has a native .exe that can use a local (to the installation) JRE.

Tassos Bassoukos
+1  A: 

For creating native executables, you can use Excelsion Jet, which compiles Java to native code. We used it for a project at work, and we had to perform zero modification to the original source code (which targetted Sun's JDK).

barjak
FAQ: Excelsior JET is not just a packager of Java applications into Windows EXE/Linux binaries. It really compiles your Java class files into native x86 (IA-32) instructions. The resulting executables need the Excelsior JET Runtime to run, but not the Sun JRE.
TheLQ
"The resulting executables need the Excelsior JET Runtime to run".This is true, but it is also possible to embed this runtime in the generated binary. The binary is then self-sufficient. In this process, I believe it is possible to strip the runtime to keep only the parts that are used in the compiled application.
barjak