我已经为 SWT 应用程序设置了一个 Maven 项目。此应用程序在多个平台(OS X、Windows 64 位、Windows 32 位、Linux 64 位和 Linux 32 位)上运行,我已对其进行设置,以便在运行 Maven 并打包时检测到平台应用程序转到不同的目标目录。以下是 pom.xml 中实现此目的的相关部分:
<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 虚拟包和我打包应用程序的特定平台机器。到目前为止,一切都很好...
问题是我想从一台机器上为不同平台编译应用程序。我将如何实现这一目标?
我尝试使用每个平台所需的 SWT jar 在每个配置文件中设置一个属性,如下所示(Windows 64 位的示例):
<properties>
<swt.artifactId>swt.win32.x86_64</swt.artifactId>
<swt.version>3.7.2</swt.version>
</properties>
但是采用这种方法,特定于配置文件的 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?
提前致谢。