Загрузка зависимостей с использованием винограда с ошибкой плагина Jenkins Job DSL

Я выполнил работу, используя плагин Jenkins Job DSL, чтобы получить ветки SVN с библиотеками SVNKit, но у меня есть одна проблема с настройкой библиотек de jar с использованием Grape (который использует Ivy).

Если я установлю это в своем сценарии:

@Grapes( 
    @Grab(group='org.tmatesoft.svnkit', module='svnkit', version='1.8.3') 
)
import org.tmatesoft.svn.core.SVNDirEntry
import org.tmatesoft.svn.core.SVNNodeKind
...
...

Я получаю следующую ошибку:

FATAL: startup failed:
General error during conversion: Error grabbing Grapes -- [download failed: net.java.dev.jna#jna;3.5.2!jna.jar]

java.lang.RuntimeException: Error grabbing Grapes -- [download failed: net.java.dev.jna#jna;3.5.2!jna.jar]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    ...

Это довольно любопытно, потому что, если я перейду к %USERPROFILE%\.groovy\grapes\org.tmatesoft.svnkit\svnkit\jars, банки SVNKIT будут там, но по какой-то странной причине Grapes не может загрузить банки JNA.

Я обошел эту проблему, загрузив банку JNA по пути винограда, и это сработало, но я хотел бы узнать, что происходит и как это сделать правильно.

Я использую:

  • Виндовс 7 64 бит
  • Oracle JDK 1.6.0_45
  • Apache Tomcat 5.5.26
  • Дженкинс 1.553
  • Плагин Job DSL Jenkins 1.21

ОБНОВЛЕНИЕ: я не знаю почему, но теперь, после удаления папки de .groovy, кажется, что все работает нормально.

Я предполагаю, что у меня возникла проблема с сетью, когда я впервые пытался получить JNA, и Айви решила установить JNA как неработающую ссылку на Maven Central. Причина, по которой теперь работает, может заключаться в том, что после того, как я удалил папку .groovy, Grape попытался загрузить, и на этот раз сеть была в порядке.

Было бы неплохо, если бы кто-нибудь прояснил это :)


person padilo    schedule 17.03.2014    source источник


Ответы (3)


Я думаю, что иногда, когда зависимости разрешаются с помощью Grapes (и, возможно, других подобных технологий), какой-то флаг переключается до того, как зависимость будет полностью загружена или настроена должным образом. У меня это случалось и с Maven и Gradle, и проблема обычно решается путем удаления кэшированных артефактов в .m2 или .gradle и их повторной загрузки.

person Todd W Crone    schedule 26.10.2014
comment
Я разместил здесь простой пример скрипта Groovy, как явно загрузить последнюю зависимость JAR -> stackoverflow.com/questions/27136532/ - person Todd W Crone; 21.12.2014

Мы используем наш нексус в качестве хоста в файле GrapeConfig.xml.

<?xml version="1.0" encoding="UTF-8"?>
<ivy-settings>
  <settings defaultResolver="downloadGrapes" />
    <property name="repo.host" value="ourhost.on.network" override="false"/>
    <property name="repo.realm" value="Sonatype Nexus Repository Manager" override="false"/>
    <property name="repo.user" value="xxx"  override="false"/>
    <property name="repo.pass" value="xxx"  override="false"/>

  <credentials host="nexus.evdssz.admin.ch" realm="${repo.realm}" username="${repo.user}" passwd="${repo.pass}"/>
  <resolvers>
      <chain name="downloadGrapes" returnFirst="true">
      <ibiblio name="nexus" root="https://ourhost.on.network:8443/nexus/content/groups/public/" m2compatible="true"/>
      <ibiblio name="nexusreleases" root="https://ourhost.on.network:8443/nexus/content/repositories/releases/" m2compatible="true"/>
      <ibiblio name="localm2" root="file:/opt/jenkins_home/.m2/repository/" checkmodified="true" changingPattern=".*" changingMatcher="regexp" m2compatible="true"/>
    </chain>
  </resolvers>
</ivy-settings>

Следующий пример кода используется в библиотеке groovy в Jenkins:

import com.google.common.collect.HashBiMap
@Grab(group='com.google.code.google-collections', module='google-collect', version='snapshot-20080530')
def getFruit() { [grape:'purple', lemon:'yellow', orange:'orange'] as HashBiMap }
assert fruit.lemon == 'yellow'
assert fruit.inverse().yellow == 'lemon'

Включите отладку того, что делает виноград. Установите инструмент винограда на свой Jenkins. Установите параметры Java для включения отладочной информации: JAVA_OPTS="-Dgroovy.grape.report.downloads=true -Divy.message.logger.level=4 "

Приведенная выше информация взята отсюда: http://docs.groovy-lang.org/latest/html/documentation/grape.html

После всей новой конфигурации я также: - удалил .groovy/grapes/* - перезапустил jenkins

Майк

person Mike    schedule 18.12.2017
comment
Все это может работать только в том случае, если песочница Jenkins не включена. - person Ewoks; 14.10.2020

Вы пытались настроить преобразователь захвата (http://docs.groovy-lang.org/latest/html/api/groovy/lang/GrabResolver.html) ? Я не знаю преобразователь по умолчанию для винограда, но, возможно, преобразователь по умолчанию не работает.

person nerdioculos    schedule 25.10.2014