我有一个在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