如何让Nexus p2代理与Eclipse p2存储库一起使用?

时间:2015-05-24 11:34:16

标签: eclipse maven nexus tycho

我们正在使用Maven(和Tycho)和Nexus来构建我们的Eclipse插件。虽然我们不断深入研究它,但我们仍然在学习如何最好地使用Maven和Nexus。我们的插件必须在Eclipse 3.6或更高版本上运行,因此我们定义了指向Eclipse 3.6的bundle要求。我们正在运行我们自己的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可能会尝试镜像自己的存储库,导致无休止的请求?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

Eclipse存档下载站点http://archive.eclipse.org/eclipse/downloads/

上提供了包含3.6的旧版Eclipse