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

时间:2014-01-02 05:08:41

标签: java eclipse maven tycho multiplatform

我使用Tycho来构建和测试一些eclipse插件。我有一个包含许多平台特定片段的包。我还有一个测试包,它使用tycho-surefire-plugin来测试具有平台特定片段的原始包。但是,Tycho没有将当前平台的片段包含在测试运行时中。

所有特定于平台的片段看起来都像下面列出的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&#39; <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上看到various posts关于类似的问题,但在这些情况下,加载到测试运行时的片段不是具有OS过滤器的特定于平台的片段。

1 个答案:

答案 0 :(得分:9)

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

  1. eclipse-feature模块中创建一个包含所有内容的功能 原生片段。确保平台过滤每个平台 插件是正确的:在feature.xml编辑器的 Plug-Ins 选项卡上, 你需要选择每个片段适用的正确的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>
    
  3. 潜在的缺陷是<environments>模块的eclipse-feature配置:您不需要该模块的任何特殊内容;让模块继承父POM的<environments>配置。请注意,父POM应配置您的构建支持的所有环境 - 并且只有片段模块需要覆盖全局配置。