2012-04-27 171 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 dummy包(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虛擬軟件包和我打包的機器的平臺特定的一個應用。到目前爲止這麼好...

問題是我想從一臺機器編譯不同平臺的應用程序。我將如何實現這一目標?

我試圖建立一個屬性與所需的每個平臺,像這樣的(例如,對於Windows 64位)的SWT罐子每個配置文件:

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

但採取這種方法既所述輪廓具體SWT罐子平臺特有的一個地方我跑的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 jar?

在此先感謝。

回答

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 2012-04-30 14:18:29

+0

很抱歉,您可能想要試試這個: http://mchr3k.github.com/swtjar/ – hennr 2012-04-30 17:22:18

+0

謝謝,我一定會試試看,儘管我懷疑Maven會嘗試打包無論如何,主機的圖書館。我會及時向大家發佈。 – Alf 2012-05-02 15:44:49