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 itself runs on The runs on Linux, in addition to Solaris,
Windows, and Mac OS 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 may 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, 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 for automatically installing upgrades to
your customers. The major enhancement in the use of XML 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.6.0_17/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.6.0_17/lib/tools.jar.