Hacer un instalador con el plugin de IzPack para maven

De ChuWiki

Suponemos que ya tenemos claro cómo se hace un instalador usando IzPack. Si no es así, conviene leer primero Ejemplo sencillo con izpack. En este tutorial vamos a ver cómo se integra IzPack con maven, por medio del plugin de Izpack, haciendo un ejemplo sencillo. Tienes todos los ficheros del ejemplo en ejemplo-izpack/maven-izpack.

Configurar el pom.xml[editar]

Traer todo lo necesario[editar]

Para que IzPack pueda hacer el instalador, necesita acceso a todos los ficheros que deben ir en el instalador. Por ejemplo, el jar de nuestra aplicación, los jar de los que dependemos, los iconos, etc. Muchos de estos ficheros son sencillos, puesto que estarán debajo de nuestro proyecto maven, en algún directorio

  • El jar de nuestra aplicación se genera habitualmente en el directorio target.
  • Los iconos y ficheros de configuración pueden estar en src/main/config o src/main/resources
  • Para la documentación quizás hayamos hecho un src/main/doc

Sin embargo, las dependencias son más complejas. Si nuestro proyecto usa log4j.jar, ese jar no está en nuestra estructura de maven, así que IzPack no lo tiene fácilmente accesible. Una de las primeras cosas que debemos hacer para generar el instalador, es hacer una copia de todas las dependencias o ficheros que necesitemos que no estén ya en nuestro proyecto maven y debemos ponerlas en algún sitio concreto accesible para Izpack. Afortunadamente, para el caso concreto de dependencias, hay un plugin de maven, el maven-dependency-plugin, que es capaz de copiarnos todas las dependencias en target/dependency. Debemos configurar nuestro pom.xml para que ejecute este plugin. Para ello, ponemos esto en el pom.xml

<project>
  <build>
       <!-- Hacemos que en la fase de package nos traiga todas las
            dependencias -->
    <plugins>
       <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <executions>
             <execution>
                <id>copy</id>
                <phase>package</phase>
                <goals>
                   <goal>copy-dependencies</goal>
                </goals>
             </execution>
          </executions>
       </plugin>
       ....
    </plugin>
    ....
  </build>
  ....      
</project>

Hemos puesto que se ejecute en la fase de package, porque queremos que el instalador se haga cuando hagamos mvn package. Podríamos ponerlo en cualquier fase que deseemos, pero que sea en la misma o anterior a la que queramos que se cree el instalador.


Configurar el instalador[editar]

Ahora, también en el pom.xml del proyecto, debemos añadir el plugin de izpack. En dicho no necesitamos configurar nada, ya que todo tiene opciones por defecto, pero aquí cambiaremos algunas. En el pom.xml, quedaría así la parte del plugin izpack

<project>
   <build>
      <plugins>
       <!-- Plugin de izpack para generar el instalador, configurado
            para que lo genere en la fase de package -->
       <plugin>
          <groupId>org.codehaus.izpack</groupId>
          <artifactId>izpack-maven-plugin</artifactId>
          <executions>
            <execution>
               <phase>package</phase>
               <goals>
                  <goal>izpack</goal>
               </goals>
               <configuration>
                  <izpackBasedir>target</izpackBasedir>
                  <installerFile>target/Setup-maven-izpack-1.0-SNAPSHOT.jar</installerFile>
               </configuration>
            </execution>
          </executions>
          <dependencies>
            <dependency>
              <groupId>org.codehaus.izpack</groupId>
              <artifactId>izpack-standalone-compiler</artifactId>
              <version>4.2.1</version>
            </dependency>
          </dependencies>
        </plugin>
        ....
      </plugins>
      ....
    </build>
    ...
</project>

Le decimos que el goal a ejecutar es izpack:izpack y que lo queremos en la fase de package, para que se genere al ejecutar el comando mvn package. Este comando también creará antes el jar de nuestra aplicación y lo dejará en target.

Dentro de la configuración, le decimos cual es el directorio donde izpack debe buscar las cosas, que en este ejemplo es el directorio target (<izpackBasedir>target</izpackBasedir>). Si no ponemos esta línea, buscará a partir del directorio principal del proyecto maven, por lo que las rutas que tendremos que poner más adelante en el fichero install.xml de izpack serán algo más largas. Ese fichero install.xml es en el que le diremos más adelante a izpack qué ficheros debe incluir en el instalador y dónde están ubicados.

También estamos diciendo qué nombre deseamos para el instalador, Setup-maven-izpack-1.0-SNAPSHOT.jar en este caso y dónde queremos que lo deje, en el directorio target (<installerFile>target/Setup-maven-izpack-1.0-SNAPSHOT.jar</installerFile>). Si no ponemos nada, lo dejará en el directorio principal del proyecto y le pondrá un nombre similar al del proyecto y un apellido (en nuestro ejemplo, si no ponemos el nombre, lo llamará maven-izpack-1.0-SNAPSHOT-standar.jar, ya que nuestro proyecto maven es maven-izpack, version 1.0-SNAPSHOT.

También hemos puesto que el plugin depende de izpack-standalone-compiler, situado en los maven central.

Fichero de configuración de izpack[editar]

Por defecto, el plugin de izpack buscará el fichero src/izpack/install.xml, aunque se puede configurar para que lo busque con otro nombre y en otro sitio. En principio dejaremos la ubiación por defecto y el fichero es un fichero normal xml para crear un instalador de izpack. Unicamente debemos tener en cuenta en los tags <file>, <filset>, etc, que los paths de búsqueda de ficheros son relativos al directorio que indicamos en <izpackBasedir>target</izpackBasedir> en el pom.xml. Las dependencias estarán en el directorio target/dependency, que es donde las dejará el maven-dependency-plugin.

Una vez hecho esto, sólo nos queda ejecutar el comando mvn package para que:

  • Se cree en target el jar de nuestra aplicación target/maven-izpack-1.0-SNAPSHOT.jar
  • Se ejecute el plugin maven-dependency-plugin y deje en target/dependency/ los jar de los que dependemos, en este caso, el log4j-1.2.13.jar
  • Se ejecute el plugin de izpack y genere nuestro instalador, dejándolo en target/Setup-maven-izpack-1.0-SNAPSHOT.jar