【发布时间】: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 代理。还是谢谢!