2010-03-19 12 views
8

Wie rufen Sie eine Methode von einer Java-Klasse von IzPack auf? Statische Methoden sind in Ordnung, und ich muss in der Lage sein, Parameter zu übergeben.Java-Klassen von IzPack aufrufen

Vielen Dank!


Hintergrundinfo:

Ich versuche, einen IzPack Installer zu schreiben, die eine zuvor installierte Versionen der Anwendung zu erkennen vermögen. Nachdem ich herausgefunden habe, dass es diese Funktion nicht wirklich unterstützt (außer in Windows), denke ich, dass der einzige Weg, dies zu tun, darin besteht, eine Java-Klasse zu schreiben und sie von IzPack aus aufzurufen.

Tim Williscroft hat previously suggested diese Methode, die den Wert eines statischen Feld einer Klasse lautet:

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

Allerdings ist es möglich, andere als ein <condition> Tag <java> von irgendwo anrufen? Ich möchte in der Lage sein, es von einem <variable> Tag zu nennen.
Ist es auch möglich, eine Methode von einer Java-Klasse aufzurufen, anstatt einen Wert eines Feldes zu lesen? Ich möchte Parameter an meine Klasse übergeben können.

Antwort

0
+0

Ich benutze bereits Apache Ant Integration und die Ant-Java-Aufgabe ... Haben Sie Vorschläge speziell für meine Frage? – bguiz

+0

Der Gedanke ist, das Callout mit Ant in Ihre Java-Klasse zu hüllen (obwohl dies nur den obigen Vorschlag wiederholt ...) – gliptak

3

Sie statische Methoden aufrufen können, aber ich glaube nicht, dass Sie in Parameter übergeben können. Sie könnte erstellen Sie einen neuen ‚Zustand Typ‘, aber ich habe keine Erfahrung mit diesem, so kann ich die Flexibilität nicht bestätigen es bietet ...

Also, ich habe keine direkte Antwort, aber ein anderer Vorschlag, der helfen könnte:

Ich tendiere dazu, jede komplexe Nachbearbeitung an separate Prozesse weiterzuleiten.

Haben Sie das Processing Panel untersucht? Sie können einen beliebigen Prozess starten und Variablen übergeben.

z.

<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> 

Ich habe es verwendet, um Dienste einzurichten und sofort zu starten.Derartiges. Stellen Sie nur sicher, dass Ihr Skript sauber beendet wird, sonst bleibt IzPack hängen.

Siehe hier: http://izpack.org/documentation/panels.html#processpanel

+0

+1 @amir: Aha Ich denke, dass das Bearbeitungsfeld ein neues Feature in IzPack ist Ich glaube, ich habe es schon vorher bemerkt ... Danke für das Heads-up! – bguiz

+1

Haben Sie noch einen Vorschlag .. werfen Sie einen Blick auf PackJacket. PackJacket schließt IzPack mit einer GUI zum Erstellen von Installationsprogrammen ein. Wirklich nettes Werkzeug: http://packjacket.sourceforge.net/ – laher

0

ich erfolgreich einen IzPack Installer konfiguriert habe, die eine „Fledermaus“ Datei, die einen Lizenzanfrage-Code zu generieren (mit einem Parameter) während der Installation ausführt. Zuerst musste ich sicherstellen, dass die Bat-Datei in den vom Benutzer gewählten $ INSTALL_PATH kopiert wurde, und in der IzPack install.xml fügte ich ein ProcessPanel nach dem InstallPanel hinzu (wo alle Dateien, einschließlich der "Fledermaus", kopiert werden)). Meine ProcessPanel.Spec.xml sieht so aus:

<?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>