2012-04-27 10 views
10

SWTアプリケーション用にMavenプロジェクトをセットアップしました。このアプリケーションはいくつかのプラットフォーム(OS X、Windows 64ビット、Windows 32ビット、Linux 64ビット、およびLinux 32ビット)で動作し、Mavenの実行時にパッケージが検出され、パッケージ化されているアプリケーションは異なる宛先ディレクトリに移動します。ここではこれを達成するのpom.xmlから関連する部分です:Mavenで複数のアーキテクチャのSWTアプリケーションを構築する

<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台のマシンからさまざまなプラットフォームのアプリケーションをコンパイルしたいということです。どうすればこれを達成できますか?

私は(Windowsの64ビット用の例)このように、各プラットフォームに必要なSWTジャーと各プロファイルにプロパティを設定しようとしました:

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

しかし、このアプローチの両方のプロフィール - を取ります特定のSWTジャープラットフォーム固有の私はMavenのは、3瓶で終わる、「LIB」ディレクトリにコピーされます実行している1:

  • SWT-3.7.2.v3740.jar
  • スワット
  • swt.win32.x86_64-3.7.2.jar

.gtk.linux.x86_64-3.7.2.jar私は私はマシンを無視して、プロファイルを指定することができている方法はありますSWT jarを手動で削除する必要はありません。

ありがとうございます。

答えて

2

ないdepency-プラグインがそれをどのように処理するかを確認していますが、このようなだけで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 getは自動的に使用されますが、必要なもの(例えば、リリースのビルド時)に設定することもできます:

mvn -P gtk_linux_x86_64

注:必要に応じてgroupIdとartifactIdを変更してください。

+0

これは私が最初に試した結果であり、結果は私の元の質問で説明したものとまったく同じです。何があっても、Mavenは実行中のシステムのSWT jarをパッケージ化しているようです。 – Alf

+0

これを聞いて大変申し訳ありませんが、 http://mchr3k.github.com/swtjar/ – hennr

+0

よりお試しいただけます。ありがとうございます.Mavenがパッケージ化しようとしているとは思いますがホストからのライブラリは何であろうと。私はあなたの投稿を続けます。 – Alf

関連する問題