Вопрос по eclipse, java, maven – Создайте приложение с несколькими архитектурами SWT с Maven

11

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

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

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

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

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

Я упаковываю зависимости с помощью & quot; lib & quot; папка, использующая maven-dependency-plugin и Maven, достаточно умна, чтобы скопировать как фиктивный пакет SWT, так и платформо-зависимую машину, на которую я упаковываю приложение. Все идет нормально...

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

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

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

Но при таком подходе оба SWT-банку для конкретного профиляand специфичная для платформы, где я запускаю Maven, копируется в "lib" каталог, заканчивающийся тремя банками:

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

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

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

Ваш Ответ

1   ответ
2

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

    <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 используется автоматически, но ее можно установить на то, что вам нужно (например, при создании релиза), а также с помощью:

mvn -P gtk_linux_x86_64

Примечание. Измените свой groupId и artifactId по мере необходимости.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Alf
Error: User Rate Limit Exceededmchr3k.github.com/swtjar
Error: User Rate Limit Exceeded Alf

Похожие вопросы