1

我使用 Jenkins Job DSL 插件完成了一项工作,以使用 SVNKit 库获取 SVN 分支,但是我在使用 Grape(使用 Ivy)设置 de jar 库时遇到了一个问题。

如果我在我的脚本中设置它:

@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 jar 的问题,并且它有效,但我想知道发生了什么以及如何以正确的方式执行此操作。

我正在使用:

  • 视窗 7 64 位
  • 甲骨文 JDK 1.6.0_45
  • Apache Tomcat 5.5.26
  • 詹金斯 1.553
  • Job DSL Jenkins 插件 1.21

更新:我不知道为什么,但现在删除 de .groovy 文件夹后,似乎工作正常。

我想我在第一次尝试获取 JNA 时遇到了网络问题,Ivy 决定在 Maven Central 上将 JNA 设置为断开的链接。现在可以工作的原因可能是因为我删除了 .groovy 文件夹后,Grape 尝试下载,这次网络正常。

如果有人能澄清这一点会很好:)

4

3 回答 3

1

您是否尝试过配置抓取解析器(http://docs.groovy-lang.org/latest/html/api/groovy/lang/GrabResolver.html)?我不知道葡萄的默认解析器,但也许默认解析器不起作用。

于 2014-10-25T14:10:28.307 回答
1

我们在grapeConfig.xml 中使用我们的nexus 作为主机。

<?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>

Jenkins 的 groovy 库中使用了以下示例代码:

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

麦克风

于 2017-12-18T15:37:52.177 回答
0

我认为有时当使用 Grapes(可能还有其他类似技术)解决依赖关系时,会在完全下载或正确配置依赖关系之前切换一些标志。我在 Maven 和 Gradle 上也遇到过这种情况,通常通过清除 .m2 或 .gradle 中的缓存工件并强制再次获取它们来解决问题。

于 2014-10-26T19:17:50.630 回答