Eclipse 平台中的循环依赖

Circular Dependencies in Eclipse Platform

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

有一个插件org.eclipse.swt,它有一个依赖org.eclipse.swt.${osgi.platform},其中${osgi.platform}可以是以下任何一个:

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

因此我得到了 WhosebugError,但前提是我尝试将 maven-dependency-plugin-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 项目进行构建?

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

Eclipse IDE packages are built with the Maven plug-in Tycho. See for example the pom.xml file for the Eclipse platform or here the parent pom.xml for all IDE packagesTycho 使用一个或多个 Eclipse p2 存储库 来解决依赖关系。例如,Maven 存储库无法解析 Import-Package 依赖项或产品配置。在 Maven 存储库中,工件有一个版本,而在 p2 存储库中,同一 JAR 的 Java 个包也可以有不同的版本。在 Maven Tycho pom.xml 中,只需指定 p2 存储库,依赖项已在 META-INF/MANIFEST.MFfeature.xml*.product 文件中声明。