11

SWT アプリケーション用の Maven プロジェクトをセットアップしました。このアプリケーションは、いくつかのプラットフォーム (OS X、Windows 64 ビット、Windows 32 ビット、Linux 64 ビット、および Linux 32 ビット) で実行され、Maven が実行されてパッケージ化されたときにプラットフォームが検出されるように設定しました。アプリケーションは別の宛先ディレクトリに移動します。これを実現するための pom.xml の関連部分は次のとおりです。

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

わかりやすくするために、ローカル リポジトリに SWT ダミー パッケージ (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 など)。

依存関係をパックする方法は、maven-dependency-plugin を使用して「lib」フォルダーを使用することです。Maven は、SWT ダミー パッケージと、アプリケーションをパッケージ化するマシンのプラットフォーム固有のパッケージの両方をコピーするのに十分スマートです。ここまでは順調ですね...

問題は、1 台のマシンからさまざまなプラットフォーム用にアプリケーションをコンパイルしたいということです。どうすればこれを達成できますか?

次のように、各プラットフォームに必要な SWT jar を使用して、各プロファイルにプロパティを設定しようとしました (Windows 64 ビットの例)。

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

しかし、このアプローチを取ると、プロファイル固有の SWT jar、Maven を実行しているプラ​​ットフォーム固有の jar の両方が「lib」ディレクトリにコピーされ、最終的に 3 つの jar になります。

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

SWT jar を手動で削除する必要がないように、プロファイルを実行しているマシンを無視してプロファイルを指定する方法はありますか?

前もって感謝します。

4

1 に答える 1

2

depency-plugin がそれをどのように処理するかはわかりませんが、次のような依存関係が 1 つしかない場合は機能するはずです。

    <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 を変更してください。

于 2012-04-29T20:29:08.550 に答える