2010-03-19 21 views
8

¿Cómo invocar un método de una clase Java de IzPack? Los métodos estáticos son correctos, y necesito poder pasar los parámetros.Llamar a clases Java desde IzPack

¡Gracias!


información Antecedentes:

Estoy intentando escribir un instalador IzPack que es capaz de detectar a versiones anteriores instaladas de la aplicación. Después de descubrir que realmente no es compatible con esta característica (excepto en Windows), creo que la única forma de hacerlo es escribiendo una clase Java y llamándola desde IzPack.

Tim Williscroft tiene previously suggested este método, que se lee el valor de un campo estático de una clase:

<condition type="java" id="jbossEnv"> 
      <java> 
       <class>au.com.codarra.ela.installer.JBossChecker</class 
       <field>hasJBossEnv</field> 
      </java> 
      <returnvalue type="boolean">true</returnvalue> 
</condition> 

Sin embargo, es posible llamar <java> de algún lugar que no sea una etiqueta <condition>? Quiero poder llamarlo desde una etiqueta <variable>.
Además, ¿es posible llamar a un método de una clase Java en lugar de leer un valor de un campo? Quiero poder pasar parámetros a mi clase.

Respuesta

0

considerar el uso de la integración IzPack Ant

http://izpack.org/documentation/advanced-features.html#apache-ant-integration

y la tarea de llamada hormiga Java

http://ant.apache.org/manual/Tasks/java.html

+0

ya estoy usando Apache Ant integración y la tarea de hormigas de Java ... ¿Tiene alguna sugerencia específicos a mi pregunta? – bguiz

+0

La idea es incluir la leyenda en su clase Java usando Ant (aunque esto solo repite la sugerencia anterior ...) – gliptak

3

Usted puede llamar a métodos estáticos, pero no creo que se puede pasar en los parámetros. Usted podría crear un nuevo 'tipo de Estado', pero no tengo experiencia con esto, así que no puedo confirmar la flexibilidad que ofrece ...

Por lo tanto, no tengo una respuesta directa, pero otra sugerencia que podría ayudar:

Tiendo a pasar cualquier proceso posterior complejo en procesos separados.

¿Ha investigado el panel de Procesamiento? Puede iniciar cualquier proceso y pasar 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> 

Lo he utilizado para configurar los servicios y arrancar inmediatamente.Ese tipo de cosas. Solo asegúrate de que tu script salga limpiamente, de lo contrario, IzPack se bloqueará.

Ver aquí: http://izpack.org/documentation/panels.html#processpanel

+0

+1 @amir: Aha Creo que el panel de procesamiento es una nueva característica en IzPack, no lo hago Creo que lo he notado antes ... ¡Gracias por el aviso! – bguiz

+1

Tiene otra sugerencia ... eche un vistazo a PackJacket. PackJacket envuelve IzPack con una GUI para construir instaladores. Una herramienta realmente agradable: http://packjacket.sourceforge.net/ – laher

0

He configurado con éxito un instalador IzPack que ejecuta un archivo "bat" (con un parámetro) durante la instalación para generar un código de solicitud de licencia. Primero tenía que asegurarme de que el archivo bat se copiara en $ INSTALL_PATH, y en IzPack install.xml agregué un ProcessPanel después del InstallPanel (que es donde se copian todos los archivos, incluido el "bat").) Mi ProcessPanel.Spec.xml se parece a esto:

<?xml version="1.0" encoding="UTF-8" ?> 
<izpack:processing version="5.0" 
xmlns:izpack="http://izpack.org/schema/processing" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://izpack.org/schema/processing 
http://izpack.org/schema/5.0/izpack-processing-5.0.xsd"> 

<job name="initialize license"> 
    <executefile name="$INSTALL_PATH/initialize.bat" workingDir="$INSTALL_PATH" onError="fail"> 
    <arg>license</arg> 
    </executefile> 
</job> 
<onFail previous="false" next="false" /> 
<onSuccess previous="false" next="true" /> 
</izpack:processing>