使用Tycho构建片段时出错:" xyz.fragment无法在此环境中安装,因为其过滤器不适用"

时间:2015-09-29 21:33:43

标签: java eclipse maven cross-platform tycho

在Eclipse中的片段项目上运行mvn install时出现此错误:

  

$ {fragment name}无法在此环境中安装,因为其过滤器不适用。

在清单中使用Eclipse-PlatformFilter: (osgi.os=macosx)会破坏构建。

这里是关键错误的输出(ID /目录名称编辑):

[INFO] Resolving dependencies of MavenProject: ${fragmentID}:4.3.0-SNAPSHOT @ ${fragmentDir}/pom.xml
[INFO] {osgi.os=linux, org.eclipse.update.install.features=true, osgi.arch=x86_64, osgi.ws=gtk}
[ERROR] Cannot resolve project dependencies:
[ERROR]   Problems resolving provisioning plan.:
[ERROR]      ${fragment name} cannot be installed in this environment because its filter is not applicable.
[ERROR] 
[ERROR] See http://wiki.eclipse.org/Tycho/Dependency_Resolution_Troubleshooting for help.

链接(http://wiki.eclipse.org/Tycho/Dependency_Resolution_Troubleshooting)没有帮助。

我在互联网上发现了一些类似的错误(component X cannot be installed in this environment because its filter is not applicable),但它们都适用于已下载软件的情况,并且没有解决方案,或者解决方案并非如此。适用于我的情况。

感谢任何帮助!

修改 我发现在主机插件中使用Eclipse-PlatformFilter: (osgi.os=macosx)可以正常工作,并且片段中的Eclipse-PlatformFilter: (| (osgi.os=macosx) (osgi.os=linux) (osgi.os=win32) )也可以正常工作。似乎构建遍历了祖先pom中设置的每个环境,并且当片段不适用于任何一个环境时它会中断....当然,我可以设置一些标志来防止是什么?

1 个答案:

答案 0 :(得分:3)

Tycho构建了通过POM配置的所有操作系统环境。目前无法自动将这些环境过滤到配置为Eclipse-PlatformFilter的环境。因此,当仅为特定操作系统构建片段时,您需要在片段的POM中手动覆盖父POM中的<environments>配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>target-platform-configuration</artifactId>
            <version>${tycho-version}</version>
            <configuration>
                <environments>
                    <environment>
                        <os>macosx</os>
                        <ws>cocoa</ws>
                        <arch>x86_64</arch>
                    </environment>
                </environments>
            </configuration>
        </plugin>
    </plugins>
</build>