0

我的项目依赖于 Apache Directory Studio 插件。我创建了一个pom.xml文件并将 Apache Directory Studio 更新站点添加为存储库。但是,Tycho 无法加载 Apache Directory Studio 更新站点。

该站点不是 p2 存储库,但只有一个 site.xml。如何在我的构建中使用这个站点?


从主 pom.xml 文件中提取:

<repositories>
    <repository>
          <id>kepler</id>
          <layout>p2</layout>
          <url>http://download.eclipse.org/releases/kepler</url>
    </repository>
    <repository>
         <id>apacheds</id>
         <layout>p2</layout>
         <url>http://directory.apache.org/studio/update/2.x</url> <!-- old-style update site -->
    </repository>
    <repository>
         <id>gef</id>
         <layout>p2</layout>
         <url>http://download.eclipse.org/tools/gef/updates/releases</url>
    </repository>
    <repository>
         <id>nebula</id>
         <layout>p2</layout>
         <url>http://download.eclipse.org/technology/nebula/incubation/snapshot</url>
    </repository>
</repositories>

错误消息来自mvn clean verify

[INFO] Fetching site.xml from http://directory.apache.org/studio/update/2.x/ (0B at 0B/s) 

[ERROR] Internal error: java.lang.RuntimeException: Failed to load p2 repository with ID 'apacheds' from locationhttp://directory.apache.org/studio/update/2.x: No repository found at http://directory.apache.org/studio/update/2.x. - [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: Failed to load p2 repository with ID 'apacheds' from location http://directory.apache.org/studio/update/2.x
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: java.lang.RuntimeException: Failed to load p2 repository with ID 'apacheds' from location http://directory.apache.org/studio/update/2.x
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.loadMetadataRepository(TargetPlatformFactoryImpl.java:296)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.gatherExternalInstallableUnits(TargetPlatformFactoryImpl.java:266)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:164)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:117)
    at org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.createTargetPlatform(TargetPlatformFactoryImpl.java:1)
    at org.eclipse.tycho.p2.resolver.P2TargetPlatformResolver.computeTargetPlatform(P2TargetPlatformResolver.java:214)
    at org.eclipse.tycho.core.resolver.DefaultTychoDependencyResolver.resolveProject(DefaultTychoDependencyResolver.java:100)
    at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:75)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:274)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    ... 11 more
Caused by: org.eclipse.equinox.p2.core.ProvisionException: No repository found at http://directory.apache.org/studio/update/2.x.
    at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.fail(AbstractRepositoryManager.java:395)
    at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:692)
    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 org.eclipse.tycho.p2.target.TargetPlatformFactoryImpl.loadMetadataRepository(TargetPlatformFactoryImpl.java:292)
    ... 20 more
4

1 回答 1

1

Tycho 无法针对旧式更新站点进行构建。旧更新管理器的更新站点格式(顺便说一句,在 Galileo 版本中被 p2 取代,即在 2009 年)仅包含 site.xml 索引文件,其中不包含足够的元数据来解决第谷的依赖关系。

有两种方法可以解决此问题:

  • 要求站点的提供者以 p2 存储库格式提供他们的内容。
  • 自己将旧站点格式转换为 p2 存储库,将其放在 HTTP 服务器上,然后引用转换后的站点。

可以使用此处所述的简单存根项目完成转换。

于 2014-03-27T10:19:17.943 回答