【问题标题】:How to get Nexus p2 proxy to work with Eclipse p2 repository?如何让 Nexus p2 代理与 Eclipse p2 存储库一起使用?
【发布时间】:2015-05-24 11:34:15
【问题描述】:

我们正在使用 Maven(与 Tycho)和 Nexus 来构建我们的 Eclipse 插件。虽然我们不断深入研究它,但我们仍在学习如何最好地将 Maven 与 Nexus 结合使用。我们的插件必须在 Eclipse 3.6 或更高版本上运行,因此我们定义了指向 Eclipse 3.6 的捆绑需求。我们正在运行我们自己的 Nexus,它应该充当公共存储库的镜像,但似乎只有在 repo.eclipse.org 上可用的最新版本,而不是我们需要的旧 3.6,因为我们不断获得

[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: our.own.plugin 3.0.0.qualifier
[ERROR]   Missing requirement: our.own.plugin 3.0.0.qualifier requires 'bundle org.eclipse.core.runtime 3.6.0' but it could not be found

是否有可用于旧版本的公共 Nexus 存储库?如果没有,我们在哪里可以获取 3.6 工件并将它们上传到我们的本地 Nexus?


经过进一步调查,我发现在我从 download.eclipse.org/eclipse/updates/3.6/ 添加代理作为 Nexus 的远程存储库后,构建一直在说

[INFO] Fetching p2.index from http://192.168.205.205:8081/nexus/content/groups/public-p2/ (0B of 134B at 0B/s)
[INFO] Fetching p2.index from http://192.168.205.205:8081/nexus/content/groups/public-p2/ (134B of 134B at 0B/s)
[INFO] Loading repository 'http://192.168.205.205:8081/nexus/content/repositories/eclipse-4.4' from mirror 'nexus-p2' at '192.168.205.205:8081/nexus/content/groups/public-p2/'

一段时间后终于失败了

Exception in thread "main" java.lang.StackOverflowError
at     org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:111)
at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:156)
at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadIndexFile(AbstractRepositoryManager.java:735)
at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:657)
at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96)
at org.eclipse.tycho.p2.remote.RemoteMetadataRepositoryManager.loadRepository(RemoteMetadataRepositoryManager.java:59)
at org.eclipse.tycho.p2.remote.RemoteMetadataRepositoryManager.loadRepository(RemoteMetadataRepositoryManager.java:52)
at 
...

有什么问题?

我注意到远程 Eclipse 3.6 存储库没有 p2.index 文件,所以我尝试了 Eclipse 4.4,但得到了相同的结果。


我通过将以下配置添加到 .m2/settings.xml 来使用 Nexus 作为所有存储库的镜像:

<mirror>
    <id>nexus</id>
    <mirrorOf>*</mirrorOf>
    <url>http://192.168.205.205:8081/nexus/content/groups/public/</url>
</mirror>
<mirror>
    <id>nexus-p2</id>
    <mirrorOf>*</mirrorOf>
    <mirrorOfLayouts>p2</mirrorOfLayouts>
    <url>http://192.168.205.205:8081/nexus/content/groups/public-p2/</url>
    <layout>p2</layout>
</mirror>

也许这个配置有问题?我怀疑也许 Nexus 试图镜像它自己的存储库,导致无休止的请求?

【问题讨论】:

  • Tycho 可以直接读取您在 pom.repositories 部分中指定的任何 p2 存储库。那么,为什么要通过nexus?是为了公司政策还是 s.t.技术?
  • 我只是发现在一个地方管理所有依赖存储库很方便,我没想到这比创建本地存储库更复杂。但是如果我们在本地进行,如何设置本地 p2 存储库?可以从eclipse.org下载吗?
  • 我在考虑直接参考 download.eclipse.org 等上的原始存储库。如果本地需要,也可以镜像repo,见wiki.eclipse.org/Equinox_p2_Repository_Mirroring
  • 好的,我尝试通过将存储库条目添加到 download.eclipse.org/eclipse/updates/3.6 到 POM 并删除 .m2/settings.xml 中的镜像条目。但现在我不断收到“无法解决项目依赖项”。在调试模式下,我看到正在添加存储库,但是这个存储库不起作用或者 Maven 出于某种原因忽略了它。我不明白为什么。有什么提示吗?
  • 对不起,我刚刚发现我没有正确阅读错误信息。 Eclipse 依赖项实际上现在已解决。仍然缺少一些 emf 依赖项。所以这实际上有效,即使我没有设法设置 Nexus 代理。还是谢谢!

标签: eclipse maven nexus tycho


【解决方案1】:

要从 tycho 构建中访问 eclipse 工件,最简单的方法是在你的 pom 中包含一个存储库部分,如下所示:

<repository>
    <id>eclipse-helios</id>
    <url>http://download.eclipse.org/releases/helios</url>
    <layout>p2</layout>
</repository>

显示的 url 包含来自所谓的同时发布序列的所有内容,因此通常应该包含来自单个位置的所有依赖项(它确实包含 EMF 2.6)(Helios 对应于 Eclipse 3.6)。

这个存储库很大,包含一个版本和两个服务版本。要将其缩小到例如 Helios SR2,您可能需要使用

<url>http://download.eclipse.org/releases/helios/201102250900</url>

【讨论】:

  • 提供的 URL 在如上所示的 pom 中使用时在这里有效,包括 EMF。但是,如果我在 Nexus 代理存储库中使用相同的 URL 并将其用作镜像,我会得到原始帖子中列出的效果 - 无休止地获取 p2.index 直到发生 java.lang.StackOverflowError。
【解决方案2】:

如果您将插件定义为需要 3.6.0,您将只能在 Eclipse 3.6 上运行它,而不能在任何更高版本上运行。如果要在较新版本上运行,则应将版本指定为 3.6.0 或更高版本。

Eclipse 存档下载站点http://archive.eclipse.org/eclipse/downloads/ 上提供了包括 3.6 在内的 Eclipse 的旧版本

【讨论】:

  • 插件未定义为完全使用 3.6.0,但仅作为最低要求。但是,据我了解,构建应该使用 3.6 运行,以确保我们不使用 3.6 下不支持的 api,对吗?感谢您提供旧版本的链接,但我不确定这些是否以及如何用于 Nexus 中的代理或本地 P2 存储库?
  • 抱歉,我对 Nexus 一无所知
猜你喜欢
  • 2015-12-13
  • 1970-01-01
  • 2014-05-16
  • 2019-12-13
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 2012-04-25
  • 2020-03-02
相关资源
最近更新 更多