[ACCEPTED]-What are good InstallAnywhere replacements for installing a Java EE application?-windows-installer
In this case, unfortunately, SO didn't tell 22 us much that we didn't know already (and 21 indeed the tool we ultimately chose was 20 not mentioned in any answer). However, I'm 19 posting our experiences here, as they might 18 be helpful to others later on.
We (quickly) evaluated 17 the following installer tools, mostly by 16 looking at their websites and browsing for 15 other information on the web: Actual Installer, Advanced Installer, BitRock InstallBuilder, Inno Setup, Install Creator, Installer VISE for Windows, InstallShield, install4j, IzPack, NSIS, openInstaller, Scriptlogic MSI Studio, Smart Install Maker, Symantec Wise Installation Studio, and 14 WiX.
We screened out most of them early on, and 13 ended up shortlisting two options for closer 12 evaluation: BitRock InstallBuilder and install4j. For these tools, we downloaded 11 evaluation versions and did some prototyping, to 10 see if the things that are most important 9 to us are really supported, and how easy 8 or hard it is to get things working.
Both 7 of the options were good in many things 6 (and both seemed good alternatives to InstallAnywhere):
- They produce completely native and pretty Windows .exe installers that are easy to customise with your own graphics etc.
- Both tools could easily be automated so that installer building is triggered from Ant. (With install4j it literally took me just five minutes to learn it and then implement it.)
- Both companies seem to have good support (well, at least for prospects evaluating their products ;-) Especially from BitRock we got very quick replies.
In 5 the following things install4j seemed better 4 than BitRock for our needs (many of these 3 are subjective, of course, so YMMV):
- install4j definitely has better support for running custom Java code - it can be done at any point during the installation, and regardless of whether there's any preinstalled JRE on the system.
- BitRock uses a more hard-coded sequence of installation steps while install4j is more flexible. In install4j, adding custom screens and forms (with or without custom Java code), asking user for input, etc., can be done at any point, before or after installing any files.
- Also some basic things like defining the filesets that are to be copied to the target system, and adding an installation step to replace certain strings in configuration files seemed somewhat easier in install4j.
- install4j has better support for JRE bundling
- When creating installers on Linux, the look & feel of install4j IDE was nicer (more "native") than that of BitRock
- (install4j's licensing options were better for us - we strongly preferred a couple of floating licenses to named licenses for all developers or an expensive "site license")
So ultimately 2 we went with install4j. Here are some more details 1 on why it was impressive:
- Its IDE, where you put the installer together, is very simple and easy to use - I could figure out how to do most things I wanted quickly, even without looking at documentation. And when I did have to check something in the documentation (e.g. how to refer to installer variables; how to get started writing custom Java code against the install4j API), it didn't take long to find what I needed.
- You can completely customise the screens and actions during the installation procedure, and also add custom screens and actions (coded against their Java API) at any point. This was important to us because we need to reuse existing custom Java code from the old InstallAnywhere installer.
- In some small details, install4j seems ideal for Java developers. For example, if you want to add a validation script to check some user input, you can code that very quickly in the install4j IDE itself, using plain old Java, with coding assistance resembling that of IntelliJ IDEA.
- We deemed the cost of install4j floating licenses reasonable, considering how good the tool is (and downright bargain compared to the inflated pricing of InstallAnywhere...)
- In short, it seemed like the best installer tool available for deploying Java applications.
We created BitRock InstallBuilder, a crossplatform installation 16 tool after some frustrating experiences 15 with InstallAnywhere and specially its cousin 14 (now defunct) InstallShield MP. More than 13 half of our clients use our tool to package 12 Java-based software but the tool is native, not 11 Java-based. That means we have a number 10 of advantages such as native look and feel 9 (incl. Vista, GTK, Qt, etc.) and no need 8 to do self-extraction previous to installation 7 (faster startup, less space requirements) to 6 mention a couple. To answer your specific 5 questions:
- Supports calling Java code as part of the installation at multiple points in time (such as when a certain page is displayed, files being copied, at uninstall time, etc.). The code is not compiled in the installer, but it can be called externally and the result used in the installer. If you are more specific about which kind of code that you need I can provide specific sample code. We have a lot of built-in actions for functionality that needs to be manually added to other installers, so you may not need to write that code in the first place!
- We support all versions of Windows, including 64bit and Windows 2008 (multiple customers have certified on those platforms using our installers)
- We support bundled applications servers, including Tomcat, Resin, JBoss and others. Take a look at BitNami for examples of such stacks that we have created.
- We support copying and moving files, substituting values in config files, unpacking files and most other common installation functionality. One of our principles is that the installer should provide built-in support for common installation actions and have an easy, clean interface for invoking external code that is specific to a client's product.
- We support bundling JREs, as you mention is often enough just to bundle the JRE directory and setting the appropriate value for JAVA_HOME in the launching scripts
You can take a look at some of 4 our customers such as MySQL, Samsung, Motorola, GitHub, etc. InstallBuilder 3 is a commercial product, but we offer free 2 licenses for open source projects and discounts 1 for small business and microISVs.
Just want to add that my company has used 40 InstallAnywhere for about 6 years but we 39 have decided to move on. The reason is 38 two fold.
First of all their pricing is absolute 37 highway robbery and the licensing is severely 36 restrictive compared to direct competitors 35 like INstall4J and BitRock.
My other problem 34 with InstallAnywhere is the product is only 33 minimally maintained. I have been using 32 the product for 6-7 years through many different 31 versions and bugs are rarely fixed and you 30 surely can't expect new features. Essentially 29 all you can expect is that they will add 28 support for the new version of windows/mac 27 as it comes out. Their support charges 26 are quite pricey, but I have never had a 25 support request actually implemented. When 24 I first bought the product I believe it 23 was from a company called ZeroG who were 22 focused solely on this product. They actually 21 maintained and improved the product. Back 20 then it was the only real ticket and they 19 were leaps and bounds above the competition.
Then 18 it was acquired by Macrovision and then 17 Flexera. Ever since ZeroG sold the product 16 it has been an ancillary product for the 15 owning company and the focus on it has been 14 poor. It seems like it was bought more 13 to complete a suite of products rather than 12 because the company actually wanted to maintain 11 the product.
Word of caution, evaluate 10 these products carefully because you can 9 become tied to them. We would have left 8 the product sooner, but we put so much effort 7 into not just the installer, but setting 6 up an automatic update scheme based on the 5 features/limitation of the product that 4 it is expensive to leave the product because 3 of the labor investment to reproduce this 2 in a new product.
Just my take, but I wouldn't 1 recommend InstallAnywhere.
I can vouch for izPack. It's Ant-based so you 15 can package up an Ant install in it, and 14 that Ant install can contain custom tasks, and/or 13 scripts written within your Ant build.xml 12 (e.g. using Groovy, Beanshell or any BSF-enabled 11 scripting language). So it'll cover your 10 customisable requirement.
I've used it in 9 the past for all the above - unzipping/services/custom 8 code. It's multi-platform, although I can't 7 vouch for that specific instance above (64bit 6 Windows). But if it runs Java, you should 5 be fine.
The one headache is the JRE. You'd 4 obviously require some JRE to run this. However 3 I think you should be able to pack up and 2 execute a specific JRE installation within 1 izPack.
Currently we are using GetDown to handle distribution 7 of our swing applications. We use Tomcat 6 to distribute updates and GetDown to download those 5 updates. It's really flexible and powerful, and 4 much better than java WebStart and because 3 it produces check sum for changes it saves 2 bandwith and downloads just changed files.
A 1 good tutorial : http://www.hascode.com/2012/05/creating-updatable-java-applications-using-getdown-and-the-getdown-maven-plugin/
Project website : https://github.com/threerings/getdown
Deployment in an multi-platform environment 20 is always a big source of troubles. It think 19 that the optimum solution would target the 18 creation of native packages for all platforms, like 17 RPM, DEB or MSI ... the ones that could 16 be installed unattended also.
Developers 15 should work on making the application self-healing 14 and run without installation.
Doing so will 13 payoff in minimize the deployment efforts.
I 12 know this is not quite a solution as you 11 where asking but sometimes you may get better 10 results this way.
Remember that you'll get 9 free updating service on Linux if you follow 8 these.
I still hope Microsoft will add something 7 similar to MSI (and that would not require 6 you to register at them). Meanwhile for 5 Windows you can take a look at Google Updater 4 just released as open source - http://code.google.com/p/omaha/
They released 3 a similar product for Mac OS http://code.google.com/p/update-engine/ but sad that 2 they didn't think about creating one product 1 from these two.
You can try the SetupBuilder Gradle Plugin to create a native *.msi 1 installer with a simple Gradle build script.
- It is free.
- Supports 32 bit and 64 bit Windows. Also Linux and OSX.
- Bundle the Java VM under Windows and OSX, does not required a preinstalled Java VM.
- Can run Java Code before or after the installation.
- Can create a windows service/daemon.
- Has not a GUI but use Gradle. If you already use Gradle as build script language then it is very easy.
you may be interested in launch4j
Jonik, thanks for posting such detailed 40 feedback of your experience. I wanted to 39 write a follow up answer, since you raise 38 some good points.
After certain base requirements 37 are met (which unfortunately InstallAnywhere 36 does not any more) there are not really 35 'bad' or 'good' tools, but rather tools 34 that are better suited for some projects. It 33 seems you studied carefully all options 32 and install4j will work better for your 31 project. This is probably a good choice, since 30 you have an existing Java codebase from 29 your previous installer that you want to 28 reuse (though I would like to think some 27 of that code would not be necessary with 26 InstallBuilder :)
Regarding InstallBuilder, we 25 support customizing the screen sequence 24 using the <insertBefore> tag (we probably 23 should better document this). It is also 22 straightforward to bundle a JRE (just including 21 the java/ folder in most cases) but I think 20 your criticism is valid: since this is a 19 common task we should do a better job at 18 documenting / making it accessible though 17 the GUI, including drag-and-drop in all 16 supported platforms. We already have in 15 our roadmap improving the GUI in the areas 14 you mention. The funny thing is that a lot 13 of our customers find the XML format so 12 easy to use that they prefer editing it 11 using their programming editors (as if they 10 were editing HTML)
Finally, regarding licensing, our 9 current model does not require purchasing 8 additional licenses if those extra programmers 7 will just be building the installers (not 6 designing them) or purchasing extra licenses 5 for build or continuous integration machines. In 4 any case, a couple of floating licenses 3 for install4j are more expensive than a 2 full Enterprise Site license for BitRock:)
Thanks 1 again for the feedback
I recommend having a look at cmInstall, which can 24 be found at http://sourceforge.net/projects/cminstall/
It meets almost all your requirements 23 and it's open source. Plus I'm one its developers 22 :).
- [yes] Must support running custom Java code as part of installation procedure
- [yes] Must support Windows, including latest 64-bit versions like Windows Server 2008; support for other target operating systems is a plus
- [can be easily done by using 3rd party libs- e.g.:Tanuki Software] Must be able to install a bundled application server (such as Resin or Tomcat) as a service on Windows
- [yes]Must support basic stuff like copying and moving files around, editing configuration files, extracting ZIPs, etc.
[yes - or you can programatically download 21 & unzip it ]Must support bundling a 20 specific version of JRE; at the very least 19 by including a ZIP to be extracted
6.[no 18 - it needs jdk 1.6 installed, support for 17 .exe or .msi is planned for future]Preferably 16 does not depend on a preinstalled JRE (or 15 any other 3rd party runtime environment 14 or library) on target machine; in other 13 words, can produce an independent Windows 12 .exe (or .msi)
[yes] The tool should preferably 11 be cross-platform so that installer development 10 can be done on Linux, Windows, or Mac.
7.[no 9 - the cminstall framework is "developer 8 based" - but easy to use.Just read 7 the tutorials from http://sourceforge.net/project/showfiles.php?group_id=250019&package_id=305489 and see how easy it 6 is to build an installer!] Should preferably 5 have a decent GUI for putting the installer 4 together. Once that is done, however, it 3 must be possible to skip the GUI and make 2 installer building part of automated build 1 process.
I have also reveiwed few of the open source 1 multi platform installers. Here is my comment:
- BitRock InstallBuilder: Only Great for free and open source developers as it gives free license for use in open source projects.
- InstallJammer: Good free and open source multi platform installer. Only one concern that as soon as one downloads the executable build from InstallJammer, the anti-virus program will immediately delete it. Somehow files built from InstallJammer are being caught as False Positives. You will have to work a bit more security certificate before publishing.
- Izpack: Good free and open source multi platform installer. It may be a bit cumbersome for people not used to with ant. May be great when used with GUI front-ends like PackJacket.
I've seen several people recommend IzPack, but 2 I honestly don't know if it meets your requirements. It's 1 at least free :)
Sun offers an open source installer:
I'm 5 sure that all your requested features are 4 supported.
But it seems for me a little 3 too hard to configure.
But guess what: It 2 has not only a GUI but also a (pseudo-graphic) CLI.
Nice 1 screenshots and info here.
More Related questions