FlexeraSoftware’, née
Acresso’s, née Macrovision’s, née ZeroG’s program that lets you produce
executables for installing Java apps for a variety of platforms. The IDE (Integrated Development Environment) itself runs on The runs on Linux, in
addition to Solaris, Windows, and Mac OS (Operating System) X. It also produces distributable executable installers for those
platforms. It claims to produce much smaller distributables that install faster than the Install Shield
competition. Further it will also handle installing a suitable Java VM.
The following information comes from my experience with the product since 2001. Some
of what I say will be be dated.
The are 14 versions. The simplest, InstallAnywhere standadard costs
. It is a snap to use. It creates a *.exe for windows and a *.bin script for Unix (processor independent! clever
eh?), and a Mac version too if your program can run under the Mac’s Java. The installer adds the program to
the menu with an icon. The problems with the free version include:
- If you ask it to install the JVM (Java Virtual Machine), it makes a private copy. Every app gets its own copy of the JVM. You soon
fill up your client’s disks with duplicate copies of the JVM.
- If the end user has several JVMs
installed it asks the user which to use. Most end users have no
clue what to answer. You can’t configure the JVM required at build time.
- You or the user cannot independently control whether an icon appears on the desktop, task bar, or start
menu.
- If you include an entire directory in the distribution, then add yet another jar to that directory, it will
not be included. You must delete the directory and re-add it.
- It does not work at all under Windows 98! I have not tested the latest version to see if this bug
has been fixed. version 6.0 could not find installed JVMs. Even when the end user
manually finds java.exe for it, it only copies some of the necessary files to the install directory. It works
fine under NT, however. Their email robot expressed no interest in hearing about the bug. They wanted me to pay
them
for doing them a favour of reporting the bug.
- You can’t specify whether included data files should override the user’s existing files or not.
They always replace.
- The version 3.5 has more customisation powers, but it is flaky. It did many
strange things and then gradually stopped doing them, without rhyme nor reason.
- Even without JVM you add about 1 MB to your executable download size and roughly the same amount to the
installed executable. Ideally this overhead should be downloaded once, not once per app.
I have exchanged many emails and phone calls with the InstallAnywhere people. I hope they follow my advice and
make the free InstallAnywhereNow more foolproof for the end user, but limit it to tiny apps. Instead they dropped
the product.
Unfortunately version 4 still gaves you no way to control which VM your app gets
connected to. Its downloads are about 200K bigger than version 3.5, a little over a
megabyte of overhead on each download, exclusive of the VM. The main new feature of version 4 is the ability to include a jar file that is automatically expanded as part of the install.
InstallAnywhereNow does not have a way of pre-installing the generic installer once, the way you can with Web
Start which would remove that overhead. The advantage is the downloads are totally self-contained.
version 5 has the power update feature similar to
JNLP (Java Network Launching Protocol) for automatically installing upgrades to your customers. The major enhancement in the use of XML (extensible Markup Language) files to
control the installer. This product is now defunct.
I tested version 6.1. It is in some ways even worse than earlier versions.
Integration with Ant
The InstallAnywhere docs are wrong. They
say in one place to put iaant.jar on the classpath and in another in ANT_HOME/lib/ext. Both are wrong. You supposed to put it in ANT_HOME/lib.
If you don’t, you will get a misleading error message like this:
taskdef A class needed by class com.zerog.ia.integration.ant.InstallAnywhereAntTask cannot be found:
org/apache/tools/ant/taskdefs/ExecTask
It is actually having trouble finding com.zerog.ia.integration.ant.InstallAnywhereAntTask not org.apache.tools.ant.taskdefs.ExecTask. Don’t try putting jars in the
jdk1.7.0_02/jre/lib/ext directory. For
some reason this confounds ant so that it can no longer find the sun.tools.javac.Main
class located in jdk1.7.0_02/lib/tools.jar.