2012-04-27 6 views
10

He configurado un proyecto Maven para una aplicación SWT. Esta aplicación se ejecuta en varias plataformas (OS X, Windows 64 bits, Windows 32 bits, Linux 64 bits y Linux 32 bits) y la he configurado para que la plataforma se detecte cuando se ejecute Maven y el paquete la aplicación va a diferentes directorios de destino. Aquí están las partes pertinentes de pom.xml para lograr esto:Crear una aplicación SWT de arquitectura múltiple con Maven

<profiles> 
    <profile> 
    <id>linux_x86_64</id> 
    <activation> 
     <os> 
     <name>linux</name> 
     <arch>amd64</arch> 
     </os> 
    </activation> 
    <build> 
     <directory>${project.basedir}/target/${project.version}/linux_x86_64</directory> 
    </build> 
    </profile> 

    <profile> 
    <id>win32_x86_64</id> 
    <activation> 
     <os> 
     <name>linux</name> 
     <arch>i386</arch> 
     </os> 
    </activation> 
    <build> 
     <directory>${project.basedir}/target/${project.version}/win32_x86_64</directory> 
    </build> 
    </profile> 
    ... 
</profiles> 

Y la dependencia utilizado para SWT es la siguiente:

<dependencies> 
    <dependency> 
    <groupId>org.eclipse</groupId> 
    <artifactId>swt</artifactId> 
    <version>3.7.2.v3740</version> 
    </dependency> 
... 
</dependencies> 

Para aclarar las cosas, he instalado en mi repositorio local del SWT paquete dummy (org.eclipse.swt_3.7.2.v3740f.jar) y todos específicos de la plataforma (org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f, org.eclipse.swt.win32.x86_64_3 .7.2.v3740f, etc.).

La forma en que paquete las dependencias es con una carpeta "lib" usando maven-dependency-plugin y Maven es lo suficientemente inteligente como para copiar tanto el paquete ficticio SWT como el específico de plataforma de la máquina donde estoy empaquetando solicitud. Hasta ahora todo bien ...

El problema es que me gustaría compilar la aplicación para las diferentes plataformas desde una sola máquina. ¿Cómo lograría esto?

He tratado de establecer una propiedad en cada perfil con el frasco SWT necesaria para cada plataforma, como esto (ejemplo para Windows de 64 bits):

<properties> 
    <swt.artifactId>swt.win32.x86_64</swt.artifactId> 
    <swt.version>3.7.2</swt.version> 
</properties> 

Pero este enfoque tanto en el perfil- tarro de SWT específica y la específica de la plataforma uno donde estoy corriendo Maven se copia en el directorio "lib", para terminar con tres tarros:

  • SWT-3.7.2.v3740.jar
  • swt .gtk.linux.x86_64-3.7.2.jar
  • swt.win32.x86_64-3.7.2.jar

¿Hay una manera en la que podría especificar un perfil haciendo caso omiso de la máquina donde estoy ejecutarlo para que no tenga que eliminar manualmente su jar SWT?

Gracias de antemano.

Respuesta

2

No estoy seguro de cómo el depency-plugin lo maneja, pero debería funcionar si tiene sólo una dependencia como ésta:

<dependency> 
     <groupId>${swt.groupId}</groupId> 
     <artifactId>${swt.artifactId}</artifactId> 
     <version>3.7.2</version> 
     <scope>compile</scope> 
    </dependency> 

Y luego perfiles como los siguientes:

<profile> 
    <id>gtk_linux_x86_64</id> 
    <activation> 
    <os> 
     <name>linux</name> 
     <arch>x86_64</arch> 
    </os> 
    </activation> 
    <properties> 
    <swt.groupId>org.eclipse.swt.gtk.linux</swt.groupId> 
    <swt.artifactId>x86_64</swt.artifactId> 
    </properties> 
</profile> 

Ahora el La versión necesaria de SWT get se usa automáticamente, pero se puede configurar según lo que necesite (por ejemplo, al crear una versión) y también con:

mvn -P gtk_linux_x86_64

Nota: Cambie su groupId y artifactId según sea necesario.

+0

Eso es exactamente lo que probé primero y los resultados son exactamente los mismos que los descritos en mi pregunta original. Parece que no importa qué, Maven empaqueta el contenedor SWT del sistema en el que se está ejecutando. – Alf

+0

Perdón por escuchar eso, es posible que desee probar este: http://mchr3k.github.com/swtjar/ – hennr

+0

Gracias, definitivamente voy a intentarlo, aunque sospecho que Maven intentará empaquetar la biblioteca del host no importa qué. Te mantendré informado. – Alf

Cuestiones relacionadas