2012-04-27 136 views
10

我为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?

在此先感谢。

回答

2

不确定depency-插件如何处理它,但如果你有这样一个只有一个依赖它应该工作:

<dependency> 
     <groupId>${swt.groupId}</groupId> 
     <artifactId>${swt.artifactId}</artifactId> 
     <version>3.7.2</version> 
     <scope>compile</scope> 
    </dependency> 

然后型材这样的:

<profile> 
    <id>gtk_linux_x86_64</id> 
    <activation> 
    <os> 
     <name>linux</name> 
     <arch>x86_64</arch> 
    </os> 
    </activation> 
    <properties> 
    <swt.groupId>org.eclipse.swt.gtk.linux</swt.groupId> 
    <swt.artifactId>x86_64</swt.artifactId> 
    </properties> 
</profile> 

现在所需版本的SWT get自动使用,但可以设置为您需要的内容(例如,在构建版本时):

mvn -P gtk_linux_x86_64

注意:根据需要更改您的groupId和artifactId。

+0

这正是我第一次尝试,结果与我原来的问题中描述的完全一样。看起来无论如何,Maven都会将它运行的系统的SWT包装起来。 – Alf 2012-04-30 14:18:29

+0

很抱歉,您可能想要试试这个: http://mchr3k.github.com/swtjar/ – hennr 2012-04-30 17:22:18

+0

谢谢,我一定会试试看,尽管我怀疑Maven会尝试打包无论如何,主机的图书馆。我会及时向大家发布。 – Alf 2012-05-02 15:44:49