Calling Java classes from IzPack

installation, izpack, java

Solution

You can call static methods, but I don't think you can pass in parameters. You could create a new 'Condition type', but I have no experience with this so I can't confirm the flexibility it provides...

So, I don't have a direct response, but another suggestion which might help:

I tend to pass any complex post-processing on to separate processes.

Have you investigated the Processing panel? You can start any process, and pass in variables ..

e.g.

<processing>
  <job name="do xyz">
    <os family="windows" />
    <executefile name="$INSTALL_PATH/scripts/xyz.bat">
      <arg>doit</arg><arg>$variable</arg>
    </executefile>
  </job>
  <job name="do xyz">
    <os family="unix" />
    <executefile name="$INSTALL_PATH/scripts/xyz.sh">
      <arg>doit</arg><arg>$variable</arg>
    </executefile>
  </job>
</processing>

I've used it to set up services and start up immediately. That kind of thing. Just make sure your script exits cleanly, otherwise IzPack will hang.

See here: http://izpack.org/documentation/panels.html#processpanel

Problem

How do you invoke a method from a Java class from IzPack? Static methods are OK, and I need to be able to pass it parameters. Thank you! Background info: I am trying to write an IzPack installer which is able to detect a previously installed versions of the application. After finding out that it doesn't really support this feature (except in Windows), I think the only way to do this is through writing a Java class and calling it from IzPack. Tim Williscroft has previously suggested this method, that reads the value of a static field of a class: ``` <condition type="java" id="jbossEnv"> <java> <class>au.com.codarra.ela.installer.JBossChecker</class <field>hasJBossEnv</field> </java> <returnvalue type="boolean">true</returnvalue> </condition> ``` However, is it possible to call `<java>` from somewhere other than a `<condition>` tag? I want to be able to call it from a `<variable>` tag. Also, is it possible to call a method from a Java class instead of reading a value of a field? I want to be able to pass parameters to my class.

Original source