Ошибка захвата неразрешенной зависимости Grapes не найдена

ОБНОВЛЕНИЕ 8/6:

Расширенное ведение журнала показало мне, что существует проблема с удалением старой банки из кеша, что приводит к фатальной ошибке «не найдено». Есть и другие темы, похожие на эту, но только когда кто-то блокирует файл в своей IDE. Мы запускаем один groovy-скрипт от Jenkins, и никто не заходит в этот ящик.

Мы запустили process explorer сразу после сбоя и блокировок не было. Затем я вхожу в систему с пользователем, которого Дженкинс использует для запуска сценария, и я не получаю ошибок при удалении файлов.

Также кажется, что в IVY 2.1 было исправлено, чтобы не сбой, когда jar не может быть удален, и я использую Ivy 2.2 (Groovy 1.8.4). Что дает?

Couldn't delete outdated artifact from cache: C:\Users\myUser\.groovy\grapes\com.a.b.c\x-y-z\jars\x-y-z-1.496.jar

затем ложная (?) ошибка:

Caught: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: Error grabbing Grapes -- [unresolved dependency: com.a.b.c#x-y-z;1.+: not found]
at smokeTestSuccess.<clinit>(smokeTestSuccess.groovy)

Интересно, что это происходит каждый день при первом запуске скрипта после 5 утра. Я предполагаю, что кеш становится недействительным из-за какой-то конфигурации по умолчанию в 5 утра? Это какая-то подсказка??


Исходное сообщение:

Периодически я получаю сообщение об ошибке при запуске нескольких разных сценариев Groovy, которые используют одно и то же объявление @Grab. (имена файлов изменены для защиты невиновных). Сначала полное объявление Grab:

@GrabResolver(name = 'libs.release', root = 'http://myserver:8081/artifactory/libs-release', m2compatible = 'true') @Grapes([
@Grab(group = 'com.a.b.c, module = 'x-y-z', version = '1.+', changing = true),
@Grab('commons-lang:commons-lang:2.3'),
@Grab('log4j:log4j:1.2.16'),
@Grab('gpars:gpars:0.12'),
@Grab('jsr166y:jsr166y:1.7.0'),
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.6'),
@Grab('org.apache.commons:commons-collections:3.2.1'),
@Grab('org.apache.httpcomponents:httpclient:4.2.2'),
@Grab('org.apache.httpcomponents:httpcore:4.2.3'),
@Grab('org.cyberneko.html:nekohtml:1.9.17'),
@Grab('xerces:xercesImpl:2.11.0'),
]) @GrabConfig(systemClassLoader = true)

Затем ошибка:

Caught: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: Error grabbing Grapes -- [unresolved dependency: com.a.b.c#x-y-z;1.+: not found]

При выполнении многочисленных поисков в Интернете причина всегда кажется очень простой, любой из этих двух основных проблем: 1. Репозиторий недоступен 2. Файл JAR не существует.

Однако в журналах артефактов я доказал, что файл действительно загружается:

* Artifactory приняла запрос на загрузку: 2014-07-17 07:58:19,938 [ПРИНЯТО ЗАГРУЗИТЬ] libs-release-local:com/a/b/c/xyz/1.477/xyz-1.477.jar для анонимного пользователя/165.226 .40.155.

* Artifactory поставил jar: 20140717075820|156|REQUEST|165.226.40.155|non_authenticated_user|GET|/libs-release/com/a/b/c/x-y-z/1.477/x-y-z-1.477.jar|HTTP/1.1|200|1276695

Все скрипты работают примерно в 100% случаев, если их просто перезапустить. Все это наводит меня на мысль, что проблема в таймауте Grab. Теоретически, когда я запускаю скрипт во второй раз, файл находится в кеше, и все происходит быстрее, поэтому он не падает.

Для приведенного выше реального запроса я вижу около 20 секунд прошедшего времени в журнале http от запроса до загрузки.

Вопросы:

  1. Моя теория кажется правильной?

  2. Есть ли способ увеличить время, в течение которого скрипт будет ждать разрешения @Grab?

  3. Помещение блока try/catch вокруг операторов @Grab кажется хорошей идеей? Или это просто скроет настоящую проблему?

заранее спасибо!!!!


person spozun    schedule 21.07.2014    source источник
comment
попробуйте запустить со следующими системными свойствами, чтобы получить больше информации: -Dgroovy.grape.report.downloads=true -Divy.message.logger.level=4   -  person Dror Bereznitsky    schedule 22.07.2014
comment
У меня есть отличный скрипт, и я использовал его @Grab(group='org.apache.commons', module='commons-collections4', version='4.2'). Я не мог запустить его из-за ошибки Ошибка захвата Grapes -- [неразрешенная зависимость: org.apache.commons#commons-collections4;4.2: не найдено] Используя -Divy.message.logger.level=4, я обнаружил следующую проблему: Server access error at url https://repo1.maven.org/maven2/org/apache/commons/commons-collections4/4.2/commons-collections4-4.2.pom (javax.net.ssl.SSLException: Received fatal alert: protocol_version) Мое решение заключалось в использовании JDK 8, а не JDK7   -  person razvang    schedule 07.09.2018


Ответы (1)


Кажется, я наконец-то нашел ответ на свой вопрос.

Я считаю, что в Groovy 1.8.4 (или Ivy 2.2) есть какая-то ошибка, тем более что это поведение отражает древнюю задокументированную ошибку Ivy с точно такой же схемой сообщений об ошибках и поведением.

Обновление до Groovy 2.3.6 (включая Ivy 2.3) решает проблему.

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

-Dgrape.root=D:\Temp\grapeCache

ОБНОВЛЕНИЕ 19 АВГУСТА:

После того, как мы обновились до Groovy 2.3.6, ошибка исчезла, но затем я понял, что jar больше не загружается при использовании преобразователя «1.+». Что-то в файле defaultgrapeConfig.xml вызывало проблему. Наконец-то все работает правильно после того, как (в дополнение к обновлению Groovy) мы переопределили defaultgrapeConfig.xml нашим собственным урезанным файлом, используя эту командную строку JAVA_OPT:

-Dgrape.config=D:\Temp\myGrapeConfig.xml

который имел это содержимое:

<ivysettings>
  <settings defaultResolver="downloadGrapes"/>
    <resolvers>
    <chain name="downloadGrapes">
    </chain>
    </resolvers>
</ivysettings>

ТАКЖЕ:

Для полноты (дальнейшие шаги):

  1. В графическом интерфейсе Jenkins обновите задания:

    а. Обновите раскрывающийся список для каждого сценария: Выполнить сценарий Groovy > Версия Groovy > Groovy-2.3.6.

    б. Обновите JAVA_OPTS для каждого сценария (необходимо нажать кнопку «Дополнительно» под сценарием, чтобы увидеть JAVA_OPTS):

    -Dgrape.config=D:\Software\SfGrapeConfig.xml

    Дополнительные параметры ведения журнала: -Dgroovy.grape.report.downloads=true -Divy.message.logger.level=4

  2. В самом скрипте Groovy удалите этот параметр в аннотации @GrabResolver: m2compatible = 'true'

  3. Если вы получаете эту или подобную ошибку:

«не удалось найти клиент или сервер jvm в [Что бы ни было JAVE_HOME], убедитесь, что это допустимый jdk/jre, содержащий нужный тип jvm»

Удалите groovy.exe и groovyw.exe из папки D:\Software\Groovy-2.3.6\bin (если exe-файлы не существуют, подключаемый модуль Jenkins groovy будет использовать версии этих файлов bat, и они обрабатывают 32-разрядные / 64-битная проблема лучше, чем у exe)

person spozun    schedule 08.08.2014