我为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?
在此先感谢。
这正是我第一次尝试,结果与我原来的问题中描述的完全一样。看起来无论如何,Maven都会将它运行的系统的SWT包装起来。 – Alf 2012-04-30 14:18:29
很抱歉,您可能想要试试这个: http://mchr3k.github.com/swtjar/ – hennr 2012-04-30 17:22:18
谢谢,我一定会试试看,尽管我怀疑Maven会尝试打包无论如何,主机的图书馆。我会及时向大家发布。 – Alf 2012-05-02 15:44:49