【问题标题】:Build multiple architecture SWT application with Maven使用 Maven 构建多架构 SWT 应用程序
【发布时间】:2012-05-08 11:21:57
【问题描述】:

我为 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) 和 all 特定于平台的包 (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 的特定于平台的 SWT jar 都被复制到“lib”目录中,最终得到三个 jar: p>

  • 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?

提前致谢。

【问题讨论】:

    标签: java eclipse maven swt


    【解决方案1】:

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

        <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。

    【讨论】:

    • 这正是我首先尝试的,结果与我原来的问题中描述的完全一样。看来不管怎样,Maven都将运行它的系统的SWT jar打包了。
    • 很抱歉听到这个消息,您可能想试试这个:mchr3k.github.com/swtjar
    • 谢谢,我一定会试一试,虽然我怀疑Maven无论如何都会尝试从主机打包库。我会及时通知你。
    • 我很期待你的报告,我自己从来没有使用过这个项目。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2017-05-09
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多