我试图将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项目进行构建?
答案 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.MF
,feature.xml
和*.product
文件中声明。