2012-04-27 9 views
10

Przygotowałem projekt Maven dla aplikacji SWT. Ta aplikacja działa na kilku platformach (OS X, Windows 64-bit, 32-bitowy system Windows, 64-bitowy system Linux i 32-bitowy system Linux) i skonfigurowałem ją tak, aby platforma była wykrywana podczas uruchamiania Maven i pakowania aplikacja trafia do różnych katalogów docelowych. Tutaj są odpowiednie części z pom.xml do osiągnięcia tego celu:Tworzenie aplikacji architektury wielostronicowej SWT z 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> 

a zależność używany SWT to:

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

Żeby było jasne, mam zainstalowane w moim lokalnym repozytorium SWT pakiet dummy (org.eclipse.swt_3.7.2.v3740f.jar) i all te specyficzne dla platformy (org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f, org.eclipse.swt.win32.x86_64_3 .7.2.v3740f itp.).

Sposób, w jaki pakuję zależności, jest z folderem "lib" przy użyciu wtyczki zależnej od maven, a Maven jest na tyle sprytny, aby skopiować zarówno pakiet atrap SWT, jak i platformę specyficzną dla maszyny, w której pakuję podanie. Do tej pory tak dobrze ...

Problem polega na tym, że chciałbym skompilować aplikację dla różnych platform z jednego komputera. Jak to osiągnąć?

Próbowałem konfigurowania właściwości w każdym profilu ze słoika SWT potrzebnego dla każdej platformy, tak (przykład dla Windows 64-bitowy):

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

Ale biorąc to podejście zarówno profile- specyficzny SWT słoik i platforma-specyficzny gdzie biegnę Maven skopiowane do katalogu "lib", kończąc na trzech słoików:

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

Czy istnieje sposób, w jaki mogę określić profil ignorując maszynę gdzie jestem uruchamiając go, aby nie trzeba ręcznie usuwać jego pliku SWT?

Z góry dziękuję.

Odpowiedz

2

Nie wiesz jak depency-plugin obsługuje go, ale to powinno działać, jeśli masz tylko jedną zależność jak ten:

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

A potem profile, takie jak:

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

Teraz potrzebna wersja SWT get jest używana automatycznie, ale można ją ustawić na to, czego potrzebujesz (np. podczas budowania wersji), a także:

mvn -P gtk_linux_x86_64

Uwaga: W razie potrzeby zmień identyfikator groupId i artefactId.

+0

To jest dokładnie to, co próbowałem pierwszy, a wyniki są dokładnie takie same jak te opisane w moim oryginalnym pytaniu. Wygląda na to, że niezależnie od tego, Maven pakuje słoik SWT systemu, w którym działa. – Alf

+0

Przykro mi to słyszeć, ale warto spróbować, niż: http://mchr3k.github.com/swtjar/ – hennr

+0

Dzięki, na pewno spróbuję, chociaż podejrzewam, że Maven spróbuje spakować biblioteka od hosta bez względu na wszystko. Będę was informować. – Alf