2016-02-10 4 views
1

Я работаю над пакетом OSGi, используя bndtools в Eclipse. Я просто добавил новый пакет (Apache Commons Logging) в cnf/localrepo хранилище, и наш CI сервер теперь провалив сборки:bnd плагин gradle не удается после добавления пакетов в репозиторий

[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 не нуждался в управлении индексами?

ответ

0

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

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

Возможно ли добавить задачу в наш build.gradle, который обновляет индексы перед сборкой? хранилище Bundle-концентратор

bndtools' использует org.osgi.impl.bundle.repoindex.cli плагин проиндексировать репозиторий в build.gradle. Так как я не владеет заводным или Gradle, я просто скопировал свой код в кнф/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 указал мне в направлении сценариев пачки хаба.

2

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

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

+0

Это LocalIndexedRepo. Мы использовали для фиксации индекса, но мы обнаружили, что атрибут «increment» в теге вызвал конфликты слияния каждый раз, когда кто-то вытащил из vcs. FileRepo не полезен для нас, потому что нам нужно разрешать зависимости во время выполнения из нашего репозитория. – pconley

+0

Я видел дискуссию о пользователях bndtools, но репозиторий github Eli больше не существует, и я не мог видеть происхождение его типа задачи IndexRepository. Однако теперь я вижу, что Bndtools-Hub имеет задачу (https://github.com/bndtools/bundle-hub/blob/master/build.gradle), которая индексирует свой репозиторий. Это и FixedIndexedRepo могут мне помочь. – pconley

+0

Проблема Эли выполняла задачу реиндекса, а сборка - в том же шаге градации. Если вы выполняете отдельные вызовы градации, вы в порядке. Если вы хотите запускать один и тот же вызов градации, вам необходимо обработать исправление ошибок после шага reindex, как описано в групповом потоке. –

 Смежные вопросы

  • Нет связанных вопросов^_^