2012-04-27 2 views
10

Я создал проект Maven для приложения SWT. Это приложение работает на нескольких платформах (OS X, Windows 64-bit, Windows 32-bit, Linux 64-bit и Linux 32-bit), и я настроил его так, чтобы платформа была обнаружена, когда Maven запущен и упакован приложение отправляется в разные целевые каталоги. Вот соответствующие части pom.xml для достижения этой цели:Создание приложения с несколькими архитектурами SWT с 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> 

И зависимость используется для SWT это:

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

Чтобы сделать вещи ясно, я установил в моем локальном хранилище СВТ фиктивный пакет (org.eclipse.swt_3.7.2.v3740f.jar) и все специфичные для платформы (org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f, org.eclipse.swt.win32.x86_64_3 .7.2.v3740f и т. Д.).

То, как я устанавливаю зависимости с папкой «lib», используя плагин maven-dependency, и Maven достаточно умен, чтобы скопировать как пакет SWT-манекена, так и платформенный пакет, на котором я упаковываю заявление. Пока что так хорошо ...

Проблема в том, что я хотел бы скомпилировать приложение для разных платформ с одной машины. Как я могу это достичь?

Я попытался создать свойство в каждом профиле с SWT банку, необходимой для каждой платформы, как это (например, для Windows 64-бит):

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

Но такой подход как Profile- конкретный SWT баночка и платформозависимых один, где я бег Maven скопирована в «Lib» каталог, в конечном итоге с тремя баночками:

  • свтом-3.7.2.v3740.jar
  • С.Т. .gtk.linux.x86_64-3.7.2.jar
  • swt.win32.x86_64-3.7.2.jar

Есть ли способ, в котором я мог бы указать профиль не обращая внимания на машину, где я запускать его так, чтобы мне не нужно вручную удалять его банку SWT?

Заранее спасибо.

ответ

2

Не уверен, как depency-плагин обрабатывает его, но он должен работать, если у вас есть только одна зависимость, как этот:

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

И затем профили, подобные этим:

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

Теперь необходимая версия SWT get используется автоматически, но может быть настроена на то, что вам нужно (например, при создании выпуска), также используя:

mvn -P gtk_linux_x86_64

Примечание: При необходимости измените ваши идентификаторы groupId и artifactId.

+0

Это именно то, что я пробовал первым, и результаты точно такие же, как те, которые описаны в моем первоначальном вопросе. Кажется, что несмотря ни на что, Maven упаковывает SWT-банку системы, в которой он работает. – Alf

+0

Извините, что вы можете попробовать эту попытку: http://mchr3k.github.com/swtjar/ – hennr

+0

Спасибо, я обязательно попробую, хотя я подозреваю, что Maven попытается упаковать библиотека от хоста не имеет значения. Я буду держать вас в курсе. – Alf

Смежные вопросы