我已经为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的特定于平台的方法都复制到“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的处理方式,但是如果您只有一种依赖关系,它应该可以工作:

        <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版本会自动使用,但也可以使用以下命令将其设置为所需的版本(例如,构建发行版时):
    mvn -P gtk_linux_x86_64
    注意:根据需要更改groupId和artifactId。

    08-04 07:37
    查看更多