使用Maven构建多个体系结构SWT应用程序
我为SWT应用程序设置了一个Maven项目。 此应用程序在多个平台(OS X,Windows 64位,Windows 32位,Linux 64位和Linux 32位)上运行,我已对其进行设置,以便在运行Maven并打包时检测到该平台应用程序转到不同的目标目录。 以下是来自pom.xml的相关部分,以实现此目的:
linux_x86_64 linux amd64 ${project.basedir}/target/${project.version}/linux_x86_64 win32_x86_64 linux i386 ${project.basedir}/target/${project.version}/win32_x86_64 ...
用于SWT的依赖是这样的:
org.eclipse swt 3.7.2.v3740 ...
为了清楚起见,我在本地存储库中安装了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虚拟包和我正在打包应用程序的平台特定的一个。 到现在为止还挺好…
问题是我想从一台机器编译不同平台的应用程序。 我怎么做到这一点?
我已尝试在每个配置文件中使用每个平台所需的SWT jar设置属性,如下所示(Windows 64位示例):
swt.win32.x86_64 3.7.2
但是采用这种方法,特定于配置文件的SWT jar 和我正在运行Maven的特定于平台的jar被复制到“lib”目录中,最后得到三个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了?
提前致谢。
不确定depency-plugin如何处理它,但如果你只有一个像这样的依赖项它应该工作:
${swt.groupId} ${swt.artifactId} 3.7.2 compile
然后是这样的配置文件:
gtk_linux_x86_64 linux x86_64 org.eclipse.swt.gtk.linux x86_64
现在所需的SWT版本自动使用,但可以设置为您需要的内容(例如,在构建版本时)以及:
mvn -P gtk_linux_x86_64
注意:根据需要更改groupId和artifactId。