首页 > 解决方案 > Eclipse 平台中的循环依赖

问题描述

我正在尝试将 Eclipse 平台添加到我的 Maven 项目中,但偶然发现了一些非常奇怪的东西。

org.eclipse.swt一个 plugin ,它有一个 dependency org.eclipse.swt.${osgi.platform},其中${osgi.platform}可以是以下任何一个:

但是,如果您检查pom.xmlorg.eclipse.swt.win32.win32.x86_64您会发现该项目依赖于org.eclipse.swt. 这形成了一个很好的依赖循环,这在 Maven 和 OSGi 中都是不允许的。

因此,我得到了 a StackOverflowError,但前提是我尝试使用maven-dependency-pluginwith -Dosgi.platform=win32.win32.x86_64

如果我不使用该参数,则会出现以下异常:

No versions available for org.eclipse.platform:org.eclipse.swt.gtk.linux.aarch64:jar:[3.105.2,3.105.2]

(这可能没问题,因为我猜 Linux 是默认值,但它不适用于我,因为我有一台 Windows PC。)

我也不能排除依赖,例如:

        <dependency>
            <groupId>org.eclipse.platform</groupId>
            <artifactId>org.eclipse.swt</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.platform</groupId>
                    <artifactId>org.eclipse.swt.gtk.linux.aarch64</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

使用这种方法,我会收到与上述相同的错误消息。

我想知道 Eclipse 家伙是如何设法释放这些混乱的,但更重要的是:如何针对具有这样的循环依赖项的 Maven 项目进行构建?

标签: eclipsemaveneclipse-rcp

解决方案


你看错地方了。Eclipse 工件发布在 Eclipse p2 存储库中。此外,一些Eclipse 工件将发布在 Maven 存储库中,用于普通(非基于 Eclipse)的 Java 应用程序,这些应用程序不能用于构建基于 Eclipse 的应用程序。将 Eclipse SWT 发布到 Maven Central 似乎出现了问题,导致循环依赖。请将此报告给 Eclipse。

Eclipse IDE 包是使用Maven 插件Tycho构建的。例如,参见pom.xmlEclipse 平台的文件或这里所有 IDE 包的pom.xml文件。Tycho 使用一个或多个 Eclipse p2 存储库来解决依赖关系。例如,Maven 存储库无法解决Import-Package依赖关系或产品配置。在 Maven 存储库中,工件有一个版本,而在 p2 存储库中,相同 JAR 的 Java 包也可以有不同的版本。在 Maven Tychopom.xml中,只需要指定 p2 存储库,依赖项已经在META-INF/MANIFEST.MF,feature.xml*.product文件中声明。


推荐阅读