eclipse - Eclipse 平台中的循环依赖
问题描述
我正在尝试将 Eclipse 平台添加到我的 Maven 项目中,但偶然发现了一些非常奇怪的东西。
有org.eclipse.swt
一个 plugin ,它有一个 dependency org.eclipse.swt.${osgi.platform}
,其中${osgi.platform}
可以是以下任何一个:
cocoa.macosc.cocoa
gtk.linux.aarch64
win32.win32.x86_64
但是,如果您检查pom.xml,org.eclipse.swt.win32.win32.x86_64
您会发现该项目依赖于org.eclipse.swt
. 这形成了一个很好的依赖循环,这在 Maven 和 OSGi 中都是不允许的。
因此,我得到了 a StackOverflowError
,但前提是我尝试使用maven-dependency-plugin
with -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 包是使用Maven 插件Tycho构建的。例如,参见pom.xml
Eclipse 平台的文件或这里所有 IDE 包的父pom.xml
文件。Tycho 使用一个或多个 Eclipse p2 存储库来解决依赖关系。例如,Maven 存储库无法解决Import-Package
依赖关系或产品配置。在 Maven 存储库中,工件有一个版本,而在 p2 存储库中,相同 JAR 的 Java 包也可以有不同的版本。在 Maven Tychopom.xml
中,只需要指定 p2 存储库,依赖项已经在META-INF/MANIFEST.MF
,feature.xml
和*.product
文件中声明。
推荐阅读
- java - 每当我尝试更改活动时,我的应用程序就会崩溃
- c# - How to use transform.position on GUI.Button
- sql - Adding a dollar sign in front of currency
- sftp - SFTP没有保持连接活跃
- python - 如何将多维数组写入合适的轴格式?
- javascript - 将地理位置坐标存储到变量中会在控制台中返回未定义
- json - Issue in accessing API/json with multiple sections
- swift - 无法创建 Swift 包管理器库
- php - 需要计算查询mysql的平均经过时间
- php - PHP shell_exec 在终端中工作,但在网页上不显示输出