Been looking for a better(and free) replacement for InstallAnywhere for an application for some time now, I'm looking at Izpack and launch4j but I can't seem to push through using these due to some special requirement(or quirks) to the application itself.
The structure of the current application as installed are as follows:
classes folder --- the app's actual class files
lib folder ---third-party libraries
misc. files folder ---other files required by the application
the exe/bin file ---the app's launcher (main class in the classes folder)
another bin/exe file
It has to be cross-platform (Linux/Windows) and customizable JVM options at least during installation. Up to this point, I'm still betting on something, somewhere there's a less painful way to actually do this. On the other hand, some tips will help should I do the inevitable.
"Learning without thought is labor lost, thought without learning is perilous."
I've used Nullsoft-Installer (NSIS) a while ago and found it quite easy to use as well as flexible: http://nsis.sourceforge.net/Main_Page The NSIS can create windows installation files only, however, there are numerous configuration examples to create installers for java application as well (that can optionally install a JRE).
For users of other operations, you could just package your application as zip or .tar.gz and include a .sh file to start the file. Depends on the need of those users - most Linux users rather hav the flexibility of a .tar.gz that you can just unpack then an installer file that installs in either the home directory or /opt.
Alternatively you could also use java webstart. Java webstart will also give you the advantage your application can update itself automatically.