Eclipse平台中的循环依赖项

时间:2019-01-08 13:22:29

标签: eclipse maven eclipse-rcp

我试图将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_64 pom.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项目进行构建?

1 个答案:

答案 0 :(得分:1)

您在找错地方。 Eclipse工件发布在Eclipse p2存储库中。另外,一些 Eclipse工件将发布在 Maven存储库中,以用于普通的(基于非Eclipse的)Java应用程序,而这些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 packages Tycho使用一个或多个Eclipse p2存储库来解决依赖关系。例如,Maven存储库将无法解决Import-Package依赖性或产品配置。在Maven存储库中,工件具有版本,而在p2存储库中,同一JAR的Java软件包也可以具有不同的版本。在Maven Tycho pom.xml中,仅需指定p2存储库,相关性已在META-INF/MANIFEST.MFfeature.xml*.product文件中声明。