IzPack Installer - Hello World Tutorial

This tutorial provides a step by step creation of an IzPack Installer.

 

Object

Create an IzPack Installer using following tools: IzPack, Ant, Bash for GNU/Linux and Microsoft Windows 7.

IzPack on GNU/Linux

Step 1. - Assumptions

Step 2. - Preparation

  1. Start Eclipse and create a new Java Project in it.
    1. File -> New -> Java Project.
    2. Name your project (for example: HelloWorldInstaller).
    3. JRE Settings in Eclipse should be intakt.

Step 3. - Create A Swing Based Application

  1. Make sure you're in your new created project folder.
  2. Go to the source folder (src).
  3. Create a Java Class (name used in tutorial: HelloWorld).
  4. Paste the source code block down below to your new created class. This source code is a simple swing based dialog with a PushButton.
  5. Compile and run it.
A Simple Swing Based HelloWorld Application
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class HelloWorld extends JFrame {

    public HelloWorld() {
        initUI();
    }

    public final void initUI() {

       JPanel panel = new JPanel();
       getContentPane().add(panel);

       panel.setLayout(null);

       JButton quitButton = new JButton("Hello World");
       quitButton.setBounds(50, 60, 120, 30);
       quitButton.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent event) {
               System.exit(0);
          }
       });

       panel.add(quitButton);

       setTitle("Hello World");
       setSize(300, 200);
       setLocationRelativeTo(null);
       setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                HelloWorld ex = new HelloWorld();
                ex.setVisible(true);
            }
        });
    }
} 

This dialog should popup on the screen:

Step 4. - Create An Ant Script

  1. Highlight your project folder and execute the shortkey CTRL+N.
  2. Go to XML folder and choose XML File.
  3. Name this XML File (build.xml)
  4. Paste the xml code down below to build.xml
build.xml
<?xml version="1.0"?>
<project name="HelloWorld" default="build" basedir=".">
  
  <property name="src.dir" location="src" />
  <property name="build.dir" location="bin" />

  <target name="clean">
    <delete dir="${build.dir}" />
  </target>

  <target name="makedir">
    <mkdir dir="${build.dir}" />
  </target>

  <target name="build" depends="clean, makedir">
    <javac srcdir="${src.dir}" destdir="${build.dir}"/>
  </target>

</project> 

This build.xml is a standard build ant script. Right now it consists of two properties (src.dir, build.dir) and three targets (clean, makedir, build). For the future steps import this ant script to your Ant View in Eclipse.

Step 5. - Import IzPack

In this step the recently downloaded IzPack 4.3.5 Jar File will be imported to the project.

  1. Run the IzPack jar file (java -jar /path/to/IzPack/Jar)
  2. Follow the installation instructions. Remember the directory where the IzPack Installer Framework has been installed (installation path used in tutorial: /home/user/Desktop/IzPack).
  3. Create two directories. The first directory for the IzPack setting file for the creational process and the second directory for the generated installer (used in tutorial: /home/user/Desktop/Files4Installer and /home/user/Desktop/HelloWorld).

TODO: Information about the folder structure of the IzPack Installer Framework

To use the IzPack Framework in the HelloWorld project follow next instructions.

Create two more properties in the build.xml. Use the following xml code and import this right after the existing two properties.

New Properties for the build.xml
<property name="install.file" location="/home/user/Desktop/Files4Installer/install.xml" />
<property name="image.dir" location="/home/user/Desktop/Files4Installer/images" />

In the Files4Installer directory create an xml file (name of the file has to be: install.xml) and a directory named images. In this directory you should put the images used by IzPack for the Istaller. In this tutorial two images were used. Download these two images here (Image 1, Image 2) and name it helloworld_image1.png and helloworld_image2.png or create your own and put them into the images derectory. If you create your own images the size for the image 1 and image 2 should be 500x200 and 125x400 pixels, respectively.

Put the following content into the install.xml in Files4Installer

Content for install.xml
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>

<installation version="1.0">
    <info>
        <appname>Hello World Application</appname>
        <appversion>1.0</appversion>
        <authors>
            <author name="Your Givenname and Lastname" email="givenname.lastname@hello-world.org"/>
        </authors>
        <url>http://www.hello-world.de/</url>
    </info>

    <guiprefs width="640" height="480" resizable="yes"/>
 
   <locale>
        <langpack iso3="eng"/>
        <langpack iso3="deu"/>
   </locale>

   <resources>
		<res id="installer.langsel.img" src="images/helloworld_image1.png" />
		<res id="Installer.image" src="images/helloworld_image2.png" />
	    <res id="LicencePanel.licence" src="Licence.txt"/>
	    <res id="InfoPanel.info" src="Readme.txt"/>
   </resources>

   <panels>
        <panel classname="HelloPanel"/>
        <panel classname="InfoPanel"/>
        <panel classname="LicencePanel"/>
        <panel classname="TargetPanel"/>
        <panel classname="PacksPanel"/>
        <panel classname="InstallPanel"/>
        <panel classname="FinishPanel"/>
   </panels>

   <packs>
		<pack name="HelloWorld" required="yes">
			<description>Hello World Application Runnables</description>
			<file src="/home/user/workspace/HelloWorldInstaller/bin/HelloWorld.class" targetdir="$INSTALL_PATH"/>
			<file src="/home/user/workspace/HelloWorldInstaller/bin/HelloWorld$1.class" targetdir="$INSTALL_PATH"/>
			<file src="/home/user/workspace/HelloWorldInstaller/bin/HelloWorld$2.class" targetdir="$INSTALL_PATH"/>
		</pack>
   </packs>

</installation>

Code Explanation of the install.xml

  • Tag info defines the meta data of the installer. This information will be placed on the first panel (HelloPanel) of the installer (if the gui version of the installer was executed). The underlying tags are self explanatory.
  • The guiprefs tag defines the size in width and height and resizability of all the gui dialogs
  • The locale tag specifies the language of the generated intaller text.
  • The resources tag defines all resources such an image or a text file to be imported to the installer.
  • The panels tag defines which panels are shown by executing the installer. In other words these are the window dialogs.
  • The packs tag defines the content to be installed by the installer.

Common mistakes:

  • verify username in the path
  • verify the path to the directory

 

Next lines of xml code are the hearth of the creation of an installer with aid of IzPack Framework. Paste the xml code down below in the build.xml right after the build target.

The Ant Target for the IzPack
<taskdef name="mkinstaller" 
	classpath="/home/user/Desktop/IzPack/lib/standalone-compiler.jar" 
	classname="com.izforge.izpack.ant.IzPackTask"/>

<target name="mk_installer" depends="build">
	<mkinstaller input="${install.file}" 
		output="/home/user/Desktop/HelloWorld/HelloWorld_installer.jar" 
		basedir="/home/user/Desktop/Files4Installer/"/>
</target>

Code Explanation

  • This piece of code defines a taskdef and a new target named mkinstaller and mk_installer respectively. The attribute classpath of taskdef takes as value the path to the standalone-compiler of IzPack. The standalone-compiler is a jar file and it is located in the lib directory in the installation directory of IzPack (used in tutorial: /home/user/Desktop/IzPack). The value of the attribute classname should be "com.izforge.izpack.ant.IzPackTask".
  • The target mk_installer executes the previous defined taskdef mkinstaller and build the installer of HelloWorld application. The input attribute takes the install.xml and the output attribute is the directory where the ready-to-run installer file will be placed (used in tutorial: /home/user/Desktop/HelloWorld). Notice the dependency for mk_installer.

Common mistakes:

  • verify username in the path
  • verify the path to the directory

Create two files in this directory /home/user/Desktop/Files4Installer.

  • Licence.txt
  • Readme.txt

These files can be empty for now or you put some content in it for better understanding.

Step 6. - Hello World

If you reached this section and done all the pastings and installations in the right order then right now you can build your first installer containing the compiled source code of the HelloWorld application. In the Ant View of Eclipse you can find the new created target named mk_installer and by executing it the following steps should be done one by one: source code compilation -> taking compiled source code and creating an installer by using a defined directory (used in tutorial: /home/user/Desktop/Files4Installer) -> placing the created jar file in a specified directory (used in tutorial: /home/user/Desktop/HelloWorld).

IzPack on Microsoft Windows 7 (TODO)