我有一個在windows(32和64位),linux-gtk(32和64位)等幾個不同平臺上使用SWT的大型項目。一個簡單的結構:使用Maven構建多平臺多模塊
project-parent +- core +- swt-bridge (uses SWT) +- module1 (uses swt-bridge module) +- module2 +- ... +- module17 (uses swt-bridge module)
我希望能夠在所有支持的平臺上從Eclipse運行我的代碼。例如。如果我在32位Windows計算機上查看swt-bridge
模塊,它應該具有32位Windows SWT依賴關係,並且還將所需的DLL解壓到某個目錄,然後我可以將其添加到java.library.path
。
我可以通過定義由os.family
和os.arch
激活的配置文件來指定不同的依賴關係。
<profile> <id>macos</id> <activation> <os> <family>macosx</family> <arch>x86</arch> </os> </activation> <properties> <swt.native.groupId>org.eclipse.swt.carbon.macosx</swt.native.groupId> <swt.native.artifactId>x86</swt.native.artifactId> <swt.native.version>3.5.1</swt.native.version> </properties> </profile>
我還可以使用maven-dependency-plugin
提取任何的DLL。所以從SWT JAR文件target/swtlib
,並從Eclipse中使用它們。
這工作正常,如果我把配置文件在swt-bridge
模塊。但是這樣我就看不到其他項目中活動配置文件設置的屬性,例如我不能使用這些屬性(我想)的依賴插件。
我想我可以通過將配置文件移動到父POM來解決這個問題,事實上,如果我構建了整個產品,它就可以工作。但是這樣我不能只創建一個模塊,因爲Maven會抱怨缺失的屬性。
我敢肯定很多人都面臨這個問題,所以必須有一種方法在Maven中正確處理這個問題。誰能告訴我它是什麼?
我是對的,假設你有一個真正的Maven項目繼承(即子項目pom包含元素與相應的父項目座標)並且說單個子模塊由於缺少屬性而無法生成? –
2009-10-22 10:07:54
是的,有正確的指針。有沒有說過我不允許以這種方式建立一個模塊? –
2009-10-22 10:56:09
嗯,Maven文檔說明如下:'當一個項目指定一個父項時,它會繼承父項目的POM中的信息。然後它可以覆蓋並添加到此父POM'中指定的值。即假定您的子項目會看到父項目屬性。我只是檢查瞭如果父項目定義了一個激活的配置文件並且它被激活了,那麼對於子項目的maven build會看到它的正確屬性。 – 2009-10-22 11:20:13