【问题标题】:Circular Dependencies in Eclipse PlatformEclipse 平台中的循环依赖
【发布时间】:2019-06-03 04:52:35
【问题描述】:

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

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

  • cocoa.macosc.cocoa
  • gtk.linux.aarch64
  • win32.win32.x86_64

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

因此,我得到了StackOverflowError,但前提是我尝试将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 的应用程序(基于 OSGi)是通过 Tycho 使用 p2 存储库而不是 Maven 存储库构建的。依赖关系在 OSGi 和 Maven 中的定义不同。 Maven Central 提供的插件缩进用于纯 Java,而不是 OSGi 应用程序。
  • @howlger 两个项目都没有定义&lt;packing&gt; 标签(如链接中所示),因此它们都是普通的 Maven,而不是 Tycho。我也有一个普通的 Maven 项目。这应该有效,不是吗?
  • 您不能将 Eclipse 平台添加到非 Tycho Maven 项目中。 Maven 和 OSGi 中的依赖项在技术上是不同的,不能混合:在 Maven 中,依赖项只需要构建应用程序,而在 OSGi 中,包可以在运行时安装、启动和停止,并且不仅在包/JAR 级别有版本控制但也在包级别。
  • @howlger 只是为了让我正确理解你。这些 Maven 工件及其 Maven pom.xml 在 Maven Central 中...不允许与 Maven 一起使用?
  • 这些 Maven 工件可以在非 Tycho Maven 中用于构建普通(非 OSGi)Java 应用程序。例如,您也可以在纯 Java 应用程序中使用 Eclipse JGit、SWT 或 Eclipse Java 编译器。

标签: eclipse maven eclipse-rcp


【解决方案1】:

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

Eclipse IDE packages 是使用 Maven 插件 Tycho 构建的。参见例如pom.xml file for the Eclipse platform 或这里的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 文件中声明。

【讨论】:

    猜你喜欢
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多