我们正在使用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可能会尝试镜像自己的存储库,导致无休止的请求?
答案 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