IzPack can execute Java classes provided by third party developers.
This can be useful to extend IzPack's functionality in a number of ways
Some examples:
IzPack can display output from these classes via a ProcessPanel, or you could create a custom (possibly hidden) panel that calls your Java code.
This following example shows how to use a custom Java class with a ProcessPanel.
An external Java class must have a run() method with some parameters.
Note: This is not (NOT!) the run() method from the java.lang.Runnable interface. Nor is this codified as an interface in the IzPack javadoc. Instead, this would seem to be a magic method signature that is otherwise undocumented.
package org.callimachusproject;
import com.izforge.izpack.util.*;
public class HelloWorld {
public void run(AbstractUIProcessHandler handler, String[] args) {
handler.logOutput("Hello, World!", false);
}
}
|
This class uses the com.izforge.izpack.util.AbstractUIProcessHandler class to log output into a calling ProcessPanel. See the IzPack javadoc for details.
You will obviously need to include the standalone-compiler.jar on your classpath, in order to compile your class:
$ javac -cp "/path/to/izpack-standalone-compiler.jar:." org/callimachusproject/HelloWorld.java |
IzPack can only reference JAR files not individual class files from a ProcessPanel.
$ jar cvf hello.jar org/callimachusproject/HelloWorld.class added manifest adding: org/callimachusproject/HelloWorld.class(in = 470) (out= 316)(deflated 32%) $ cp hello.jar /path/to/installer/ |
NB: You should eventually use Maven to automate the compilation, packaging and moving of your JAR file.
In the <resources> section of your install.xml, reference an external file called "ProcessPanel.Spec.xml".
The ProcessPanel.Spec.xml file holds the XML configuration for the external Java class you want to execute.
<installation>
...
<resources>
<res id="ProcessPanel.Spec.xml" src="installer/ProcessPanel.Spec.xml"/>
...
</resources>
...
</installation>
|
In the install.xml file's top level, reference the JAR file containing your class.
This is partially documented at:
http://izpack.org/documentation/installation-files.html#the-jar-merging-element-jar
NB: The path to the JAR is the path at *compile time*.
<installation>
<resources>
<res id="ProcessPanel.Spec.xml" src="installer/ProcessPanel.Spec.xml"/>
</resources>
...
<jar src="path/to/hello.jar" stage="install"/>
....
</installation> |
A good place to put this is near the <resources> definition.
In the install.xml file in the panels section, use a ProcessPanel to execute your Java class.
<installation>
<resources>
<res id="ProcessPanel.Spec.xml" src="installer/ProcessPanel.Spec.xml"/>
</resources>
...
<jar src="path/to/hello.jar" stage="install"/>
....
...
<panels>
...
<panel classname="ProcessPanel"/>
</panels>
....
</installation> |
This is partially documented in http://izpack.org/documentation/panels.html#processpanel DOES THIS NEED TO BE ADDED TO THE VERSION 5 DOCS?
<processing>
<logfiledir>$INSTALL_PATH</logfiledir>
<job name="setup">
<executeclass name="org.callimachusproject.HelloWorld"></executeclass>
</job>
<onFail previous="true" next="false" />
<onSuccess previous="false" next="true" />
</processing> |
The IzPack javadoc is available in the distribution (although apparently not online). There is an RPM for Linux users.