Плагин bnd gradle не работает после добавления пакетов в репозиторий

Я работаю над пакетом OSGi, используя bndtools в Eclipse. Я только что добавил новый пакет (журналирование apache commons) в репозиторий cnf/localrepo, и теперь наш CI-сервер не выполняет сборку:

[Gradle] - Launching build.
[workspace] $ gradle build
:mybundle  : Cannot find /error/com.springsource.org.apache.commons.logging;version=0 Not found in [bnd-cache, Release, Local, Bndtools Hub, /var/lib/jenkins/jobs/myapp/workspace/cnf/nonosgi-repo r/w=true]
Error  : com.springsource.org.apache.commons.logging;version=0 Not found in [bnd-cache, Release, Local, Bndtools Hub, /var/lib/jenkins/jobs/myapp/workspace/cnf/nonosgi-repo r/w=true]

Названия проектов слегка запутаны для простоты.

Мне кажется, что плагин gradle не обновляет индекс репозитория - если один из моих товарищей по команде обновляет нашу vcs без обновления в Eclipse, он получает ту же ошибку.

Я знаю, что у bndtools есть плагин org.osgi.impl.bundle.repoindex.cli, но я недостаточно знаю о bndtools или gradle, чтобы применить его к своему проекту. Я также чувствую, что либо (а) плагин gradle должен обновлять репозитории самостоятельно, либо (б) я неправильно использую репозитории.

Можно ли добавить в build.gradle задачу, которая обновляет индексы перед сборкой?
Должны ли мы вместо этого переместить все наши зависимости в онлайн-репозиторий, чтобы bnd не управлял индексами?


person pconley    schedule 10.02.2016    source источник


Ответы (2)


Что за репо cnf/localrepo? Если это FileRepo, вам не нужно Не нужен индекс. Вы просто помещаете пакеты в формат имени папки/файла для bsn/версии пакета. Если это индексированный репозиторий, должен поддерживать индекс и зафиксировать его с новыми пакетами, добавленными в репо. Это мы управляем репозиторием bundle-hub. Всякий раз, когда добавляется новый пакет, мы обновляем индекс.

Что касается плагина gradle, вы можете написать задачу для переиндексации репо каждой сборки. См. https://groups.google.com/forum/#!searchin/bndtools-users/index$20gradle/bndtools-users/OQ0Ns5v0ELo/JOB803lBBwAJ, чтобы узнать, как это сделать.

person BJ Hargrave    schedule 10.02.2016
comment
Это LocalIndexedRepo. Раньше мы фиксировали индекс, но обнаружили, что атрибут приращения в теге ‹repositories› вызывал конфликты слияния каждый раз, когда кто-то извлекал данные из vcs. FileRepo бесполезен для нас, потому что нам нужно разрешить зависимости времени выполнения из нашего репозитория. - person pconley; 10.02.2016
comment
Я видел обсуждение bndtools-users, но репозиторий Эли на github больше не существует, и я не мог увидеть происхождение его типа задачи IndexRepository. Однако теперь я вижу, что у Bndtools-Hub есть задача (github.com /bndtools/bundle-hub/blob/master/build.gradle), который индексирует свой репозиторий. Это и FixedIndexedRepo могут мне помочь. - person pconley; 10.02.2016
comment
Проблема, с которой столкнулся Эли, заключалась в том, что задача переиндексации и сборка выполнялись на одном и том же этапе градиента. Если вы работаете как отдельные вызовы Gradle, все в порядке. Если вы хотите работать с тем же вызовом gradle, вам нужно обработать очистку ошибок после шага переиндексации, как обсуждалось в групповой ветке. - person BJ Hargrave; 11.02.2016

Должны ли мы вместо этого переместить все наши зависимости в онлайн-репозиторий, чтобы bnd не управлял индексами?

Возможно, но по разным причинам в краткосрочной перспективе проще продолжать пользоваться нашим LocalIndexedRepository.

Можно ли добавить в наш build.gradle задачу, которая обновляет индексы перед сборкой?

Репозиторий Bundle-Hub от bndtools использует подключаемый модуль org.osgi.impl.bundle.repoindex.cli для переиндексации репозитория в его build.gradle. Поскольку я плохо разбираюсь в groovy или gradle, я просто скопировал его код в cnf/localrepo/build.gradle:

repositories {
  mavenCentral()
}

configurations {
  repoindex
}

dependencies {
  repoindex group: 'biz.aQute.bnd', name: 'org.osgi.impl.bundle.repoindex.cli', version: '3.0.0' 
}

defaultTasks = [':index']

task('index') {
  /* Bundles to index. */
  def bundles = fileTree(projectDir) {
    include '**/*.jar'
    exclude '**/*-latest.jar'
    exclude '.*/'
  }
  doLast {
    javaexec {
      main = '-jar' // first arg must be the jar
      args configurations.repoindex.singleFile
      args '-n', 'Local' // REPO NAME HERE
      args bundles*.absolutePath
    }.assertNormalExitValue()
  }
}

Спасибо BJ Hargrave за то, что указал мне направление сценариев Bundle-Hub.

person pconley    schedule 11.02.2016