【发布时间】:2019-06-03 04:52:35
【问题描述】:
我正在尝试将 Eclipse 平台添加到我的 Maven 项目中,但偶然发现了一些非常奇怪的东西。
有插件org.eclipse.swt,它有一个依赖org.eclipse.swt.${osgi.platform},其中${osgi.platform}可以是以下任意一种:
cocoa.macosc.cocoagtk.linux.aarch64win32.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 项目进行构建?
【问题讨论】:
-
基于 Eclipse 的应用程序(基于 OSGi)是通过 Tycho 使用 p2 存储库而不是 Maven 存储库构建的。依赖关系在 OSGi 和 Maven 中的定义不同。 Maven Central 提供的插件缩进用于纯 Java,而不是 OSGi 应用程序。
-
@howlger 两个项目都没有定义
<packing>标签(如链接中所示),因此它们都是普通的 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