使用Maven构建多个体系结构SWT应用程序

Alf*_*Alf 11 java eclipse swt maven

我为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>
Run Code Online (Sandbox Code Playgroud)

用于SWT的依赖是这样的:

<dependencies>
  <dependency>
    <groupId>org.eclipse</groupId>
    <artifactId>swt</artifactId>
    <version>3.7.2.v3740</version>
  </dependency>
...
</dependencies>
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,我已在我的本地存储库中安装了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>
Run Code Online (Sandbox Code Playgroud)

但是采用这种方法,特定于配置文件的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了?

提前致谢.

hen*_*nnr 2

不确定依赖插件如何处理它,但如果您只有一个像这样的依赖项,它应该可以工作:

    <dependency>
        <groupId>${swt.groupId}</groupId>
        <artifactId>${swt.artifactId}</artifactId>
        <version>3.7.2</version>
        <scope>compile</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

然后是这样的配置文件:

<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>
Run Code Online (Sandbox Code Playgroud)

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

mvn -P gtk_linux_x86_64

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