如何让Tycho将特定于平台的片段加载到任何操作系统的测试运行时中?

9
我正在使用Tycho构建和测试一些Eclipse插件。我有一个包含许多平台特定片段的bundle。我还有一个测试bundle,该测试bundle使用tycho-surefire-plugin来测试具有平台特定片段的原始bundle。然而,Tycho没有将当前平台的fragment包含在测试运行时中。
所有平台特定片段都像下面列出的win64片段清单一样。(实际上,总共有六个片段,每个片段都是为我需要支持的每个平台组合而创建的。)
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Liferay AUI Upgrade Tool Win64
Bundle-SymbolicName: com.liferay.laut.win32.win32.x86_64;singleton:=true
Bundle-Version: 1.0.2.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Fragment-Host: com.liferay.ide.alloy.core
Eclipse-BundleShape: dir
Eclipse-PlatformFilter: (& (osgi.ws=win32)(osgi.os=win32)(osgi.arch=x86_64))
Bundle-Vendor: Liferay, Inc.

示例 win64 片段 pom.xml 的 <build> 部分

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>target-platform-configuration</artifactId>
            <configuration>
                <environments>
                    <environment>
                        <os>win32</os>
                        <ws>win32</ws>
                        <arch>x86_64</arch>
                    </environment>
                </environments>
            </configuration>
        </plugin>
    </plugins>
</build>

当我尝试执行Tycho构建并运行surefire测试插件时(无论我尝试哪个操作系统),正确的平台片段不会被添加到运行时中。我在stackoverflow上看到了一些各种 帖子,涉及类似的问题,但在那些情况下,加载到测试运行时中的片段不是具有操作系统过滤器的特定于平台的片段。
1个回答

10

这是一个好问题-但如果你知道正确的技巧,解决方案就不复杂:只需配置 Tycho 以将包含所有片段的特征包含到测试运行时中。

  1. eclipse-feature模块中创建一个特性,其中包括所有本地片段。确保每个插件的平台过滤器都是正确的:在 feature.xml 编辑器的“插件”选项卡上,您需要选择每个片段适用于的正确的os/ws/arch。这需要一些手动努力,但通常可以重用此特性以将您的片段包含到p2存储库/更新站点中。

  2. 使用以下 POM 配置将此特性包含到测试运行时中:

<plugin>
  <groupId>org.eclipse.tycho</groupId>
  <artifactId>target-platform-configuration</artifactId>
  <version>${tycho-version}</version>
  <configuration>
    <dependency-resolution>
      <extraRequirements>
        <requirement>
          <type>eclipse-feature</type>
          <id>fragment-containing-feature</id>
          <versionRange>0.0.0</versionRange>
        </requirement>
      </extraRequirements>
    </dependency-resolution>
  </configuration>
</plugin>
一个潜在的陷阱是eclipse-feature模块的<environments>配置:对于该模块,您不需要任何特殊设置;只需让该模块继承父POM的<environments>配置即可。请注意,父POM应配置构建支持的所有环境 - 只有片段模块需要覆盖全局配置。

那么对于包含片段的特性,如果该特性是由当前的Maven反应堆构建的,怎么办?我的意思是,我正在尝试测试的片段也是正在构建的同一片段(以及包含特性)。这个结构能支持吗? - gamerson
我已经尽力构建了一个多模块测试用例,位于此处:https://github.com/gamerson/liferay-ide-sandbox/tree/master/tycho-test-runtime然而,当我在我的Windows 64位环境中从命令行运行此测试时,由于单元测试无法从片段中找到readme.txt,因此失败了。 - gamerson
4
在你的测试项目中,你已经在 tycho-surefire-plugin 上配置了 extraRequirements。但这没有作用。extraRequirements 必须在 target-platform-configuration 插件上配置。 - oberlies
谢谢 Oberlies 先生,你再次救了我一命 :) - Gábor Lipták

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接