除非我手动调用 Grape 解析,否则 Groovy 1.8 @Grab 会失败

标签 groovy maven ivy grape

运行使用 grape 的脚本时系统 @Grab ibiblio 存储库中的依赖项,它失败,直到我手动调用 grape resolve从命令行。之后,它在本地缓存中并且脚本运行良好。

我是否需要使用其他一些注释来使其第一次从脚本中工作?告诉用户首先“Grape 解决”然后@Grab 工作感觉很笨拙。

这是脚本,为 redis 抓取 jedis jar:

#!/usr/bin/env groovy
@Grab('redis.clients:jedis:2.0.0')

import redis.clients.jedis.*

Jedis redis = new Jedis("localhost")

如果我有一个干净的 ~/.groovy/grapes 缓存,则会因此异常而失败:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during conversion: Error grabbing Grapes -- [unresolved dependency: redis.clients#jedis;2.0.0: ibiblio: unable to get resource for redis/clients#jedis;2.0.0: res=/redis/clients/jedis/2.0.0/jedis-2.0.0.pom: java.net.MalformedURLException: no protocol:  /redis/clients/jedis/2.0.0/jedis-2.0.0.pom]

它只运行一次我执行 grape resolve从命令行手动:
grape -V resolve redis.clients jedis 2.0.0

(部分输出显示它是从 ibiblio 下载的):
...
ibiblio: found md file for redis.clients#jedis;2.0.0
    => http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom (2.0.0)
downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom ...
    ibiblio: downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom
    ibiblio: downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom.sha1
sha1 OK for http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom
    [SUCCESSFUL ] redis.clients#jedis;2.0.0!jedis.pom(pom.original) (1184ms)
...

在本地缓存中后,该脚本可以与 @Grab 一起正常工作。

我没有手动添加 ~/.groovy/grapeConfig.xml 文件,所以它使用的是 groovy 附带的默认文件。我正在使用 groovy 1.8:
groovy -v
Groovy Version: 1.8.0 JVM: 1.6.0_24

我尝试在抓斗上方手动添加:
@GrabResolver(name='ibiblio', m2Compatible='true', root='http://repo1.maven.org/maven2/')

但这没有帮助。我错过了什么吗?

最佳答案

你能不能试试把这个文件放到~.groovy\grapeConfig.xml,你可能有一些环境配置问题:

<ivysettings>
  <settings defaultResolver="downloadGrapes"/>
  <resolvers>
    <chain name="downloadGrapes">
      <filesystem name="cachedGrapes">
        <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/>
        <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
      </filesystem>
      <ibiblio name="ibiblio" m2compatible="true"/>
    </chain>
  </resolvers>
</ivysettings>

关于除非我手动调用 Grape 解析,否则 Groovy 1.8 @Grab 会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335184/

相关文章:

java - 如何仅测试方法的一部分,该部分的测试是用spock编写在测试类中的

groovy - 为什么在 Groovy(版本 2.4.5)中调用 super 会错过父类?

javascript - Groovy 相当于 JavaScript isFinite()

java - 更新页面以使用新命名空间 xmlns.jcp.org 后,JSF 标记未呈现

java - Maven 中特定组依赖关系的分离

Ivy 在文件系统中找不到我的工件

java - 在 Windows 7 上配置 Apache Ant 和 Ivy

java - 从 Java 或 Groovy 运行 node-js

java - Jersey 休息服务 + mySQL 数据库 : No suitable driver found

caching - 如何在 Grails 1.2.5 上清除 Ivy 缓存