在我看来,为你的依赖指定一个配置映射总是一个好主意。
下面的ivy文件对我来说工作得很好。如前所述,只有红宝石罐被下载。
<ivy-module version="2.0">
<info organisation="org.demo" module="demo"/>
<configurations>
<conf name="compile"/>
<conf name="runtime" extends="compile"/>
<conf name="test" extends="runtime"/>
</configurations>
<dependencies>
<dependency org="org.jruby" name="jruby-complete" rev="1.6.6" conf="compile->default"/>
</dependencies>
</ivy-module>
在这里,我映射我的地方“编译”配置默认的远程配置。 (在Maven模块中,默认的ivy配置转换为“编译”范围)。
我挖成remote POM file:
<properties>
<jar.scope>provided</jar.scope>
..
..
<dependency>
<groupId>org.jruby.joni</groupId>
<artifactId>joni</artifactId>
<scope>${jar.scope}</scope>
</dependency>
<dependency>
<groupId>org.jruby.extras</groupId>
<artifactId>jnr-netdb</artifactId>
<scope>${jar.scope}</scope>
</dependency>
...
所有的额外depedencies已在 “规定” Maven的范围被宣布。
几个问题:
1) 在Maven中所提供的范围是用于罐所需要用于编译该模块。它们不需要打包,因为它们是目标运行时环境的一部分。类似的,这样的依赖不需要作为你的模块的传递依赖,因此不需要下载。
2) 所有的瓶子都位于Maven中央存储库中。下面的设置文件将检索的一切,如果你选择了忽略常春藤配置映射
<ivysettings>
<property name="ivy.checksums" value=""/>
<settings defaultResolver="chain"/>
<resolvers>
<chain name="chain">
<ibiblio name="central" m2compatible="true"/>
</chain>
</resolvers>
</ivysettings>
3) 下面的错误是由垃圾校验引起的。我提供的设置文件禁用此检查...你的东西尽量不要在远程存储库
[ivy:resolve] :::: WARNINGS
[ivy:resolve] problem while downloading module descriptor: http://repo1.maven.org/maven2/org/jruby/extras/bytelist/1.0.8/bytelist-1.0.8.pom: invalid sha1: expected=e40ee094403473e43f71e21cf9cbf71f08d2098b computed=a9627bc7e42f886e290985367040794adb676320 (977ms)
[ivy:resolve] module not found: org.jruby.extras#bytelist;1.0.8
谢谢,我把这个信息放在jruby邮件列表中。 – 2012-02-28 05:22:21