Как использовать сайт базового обновления site.xml в сборке Tycho

Мой проект зависит от плагинов 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

1 ответ

Tycho не может строить на сайтах обновлений старого стиля. Формат сайта обновлений старого диспетчера обновлений (который, кстати, был заменен на p2 в выпуске Galileo, то есть в 2009 году) содержит только индексный файл site.xml, который не содержит достаточного количества метаданных для разрешения зависимостей Tycho.

Есть два варианта решения проблемы:

  • Попросите поставщиков сайта предложить их содержимое в формате репозитория p2.
  • Преобразуйте старый формат сайта в репозиторий p2, поместите его на HTTP-сервер и вместо этого сделайте ссылку на преобразованный сайт.

Преобразование может быть выполнено с помощью простого проекта-заглушки, как описано здесь.

Другие вопросы по тегам