2012-04-27 10 views
10

Ho impostato un progetto Maven per un'applicazione SWT. Questa applicazione funziona su diverse piattaforme (OS X, Windows 64-bit, Windows 32-bit, Linux 64-bit e Linux 32-bit) e l'ho configurato in modo che la piattaforma venga rilevata quando Maven viene eseguito e il pacchetto l'applicazione va a diverse directory di destinazione. Qui sono le parti rilevanti pom.xml per raggiungere questo obiettivo:Creazione di un'applicazione SWT con più architetture 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> 

E la dipendenza utilizzata per SWT è questo:

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

di fare chiarezza, ho installato nel mio repository locale SWT dummy package (org.eclipse.swt_3.7.2.v3740f.jar) e all quelli specifici della piattaforma (org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f, org.eclipse.swt.win32.x86_64_3 .7.2.v3740f, ecc.).

Il modo in cui pacco le dipendenze è con una cartella "lib" che utilizza il plugin maven-dependency e Maven è abbastanza intelligente da copiare sia il pacchetto fittizio SWT che quello specifico della piattaforma in cui sto impacchettando applicazione. Fin qui tutto bene ...

Il problema è che mi piacerebbe compilare l'applicazione per le diverse piattaforme da una singola macchina. Come potrei ottenere questo?

Ho provato la creazione di una proprietà in ogni profilo con il vaso SWT necessaria per ogni piattaforma, in questo modo (esempio per Windows a 64 bit):

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

Ma questo approccio sia il profile- specifica vaso SWT e il specifici della piattaforma uno dove sto correndo Maven ottenere copiato nella directory "lib", finendo con tre vasi:

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

C'è un modo in cui ho potuto specificare un profilo ignorando la macchina dove sono eseguendolo in modo che non sia necessario rimuovere manualmente il suo barattolo SWT?

Grazie in anticipo.

risposta

2

Non sono sicuro di come il depency-plugin gestisce, ma dovrebbe funzionare se si dispone di una sola dipendenza come questo:

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

E poi profilo come questi:

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

Ora la la versione necessaria di SWT viene utilizzata automaticamente, ma può essere impostata su ciò che è necessario (ad esempio durante la creazione di una versione) utilizzando:

mvn -P gtk_linux_x86_64

Nota: modificare il groupId e l'artefatto ID secondo necessità.

+0

Questo è esattamente ciò che ho provato prima e i risultati sono esattamente uguali a quelli descritti nella mia domanda originale. Sembra che non importa cosa, Maven confeziona il vaso SWT del sistema in cui è in esecuzione. – Alf

+0

Mi spiace sentirlo, si consiglia di provare questo a: http://mchr3k.github.com/swtjar/ – hennr

+0

Grazie, farò sicuramente un tentativo, anche se sospetto che Maven proverà a confezionare la biblioteca dall'host non importa cosa. Vi terrò aggiornati. – Alf

Problemi correlati