Как программным способом запросить информацию и артефакты в хранилище p2? - PullRequest
0 голосов
/ 30 января 2019

У меня есть куча разных репозиториев p2, которые я хочу запрашивать программно.Какие типы пакетов / функций они предоставляют?Какие типы лицензий (если таковые имеются) связаны с пакетами?И я хотел бы просто скачать банки.

Другими словами, я хочу программно запрашивать и загружать практически любую общедоступную информацию, содержащуюся в репозитории p2, но мне не нужно ничего делать с OSGi, связанной с этой информацией.

Есть ли относительно простой способ сделать это?

Я уже попробовал несколько вещей и нашел их неадекватными:

Решение 1: директор p2 :

Я знаю о директоре p2,однако я хочу запросить информацию из приложения, не являющегося затмением, и добавление затмения для последующего запуска команд через командную строку кажется чем-то странным.Кроме того, это ограничило бы меня довольно ограниченным интерфейсом директора p2 (например, я думаю, что я не могу просто загрузить jar, я могу просто установить его, который также распаковывает его и, возможно, делает другие вещи, которых я не знаюof).

Решение 2. Создание контейнера OSGi вручную :

Просматривая API-интерфейсы Eclipse, я подумал, что этого должно быть достаточно, чтобы иметь экземпляры IArtifactRepository / IMetadataRepository (см.например: https://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fequinox%2Fp2%2Frepository%2Fartifact%2Fclass-use%2FIArtifactRepository.html). Однако получить артефакты, кажется, не совсем тривиально. Если я начну с нуля, используя информацию, представленную здесь: Программный запуск OSGi (Equinox)? Iзатем нужно создать и инициализировать IProvisioningAgentProvider, затем IProvisioningEventBus, затем мне нужен реестр и т. д. Довольно сложно понять, что именно нужно, и многие вещи - внутренние равноденствия, так что на самом деле это тоже не кажетсяпуть.

Может ли любой из множества связанных с равноденствием пучков дать "легкий" г?Чтобы сделать это?

1 Ответ

0 голосов
/ 30 января 2019

База кода bnd имеет репозиторий P2, который может быть полезен.Командная строка bnd позволяет использовать ее в интерактивном режиме.Сначала создайте bndrun файл repo.bndrun:

-standalone  true
-plugin.p2 \
    aQute.bnd.repository.p2.provider.P2Repository; \
            url="https://bndtools.jfrog.io/bndtools/update/"

В том же каталоге в оболочке вы можете сделать:

$ bnd repo -w repo.bndrun repo list

biz.aQute.bnd.maven                      [4.2.0.201901301338-SNAPSHOT]
biz.aQute.bndlib                         [4.2.0.201901301338-SNAPSHOT]
biz.aQute.repository                     [4.2.0.201901301338-SNAPSHOT]
biz.aQute.resolve                        [4.2.0.201901301338-SNAPSHOT]
...
org.bndtools.templating.gitrepo          [4.2.0.201901301338-SNAPSHOT]
org.bndtools.versioncontrol.ignores.manager [4.2.0.201901301338-SNAPSHOT]
org.bndtools.versioncontrol.ignores.plugin.git [4.2.0.201901301338-SNAPSHOT]
org.slf4j.api                            [1.7.2.v20121108-1250]

Это покажет список BSN и версийдоступно в репо p2.Из него также можно создать XML-индекс OSGi для OBR:

bnd repo -w repo.bndrun index 

Этот индекс очень легко анализируется и имеет стандартизированный формат OSGi.

Если вам нужна версия артефакта:

$ bnd repo -w repo.bndrun versions bndtools.api
[4.2.0.201901301338-SNAPSHOT]

Вы также можете получить артефакты от него:

$ bnd repo -w repo.bndrun get bndtools.api
$ ls -1
bndtools.api-4.2.0.201901301338-SNAPSHOT.jar
repo.bndrun

Если вы включите biz.aQute.bndlib и biz.aQute.bnd.repository из Maven Central, вы также можете использовать хранилище P2 из вашего кода.

Вы можете установить самую последнюю версию bnd from brew для MacOS.В других операционных системах вы можете загрузить biz.aQute.bnd JAR из Maven Central из группы biz.aQute.bnd.

https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd/4.1.0/biz.aQute.bnd-4.1.0.jar

[Я являюсь коммиттером в этом проекте]

...