【发布时间】:2012-03-26 15:05:22
【问题描述】:
如何让 Ivy 在离线/断开连接时从本地缓存中解决依赖项(包括与 changing="true" 的依赖项)?
我正在开发一个基于 Java 的开源项目,该项目使用 Apache Ivy 来解决和下载第 3 方依赖项。该项目的 build.xml 有一个名为 resolve 的 ant 目标,它会下载 Ivy(如果需要),然后使用 Ivy 检索所需的 jar。
在线时一切正常。但是,如果没有 Internet 访问,ant resolve 会失败,即使所需的 jar 位于本地 Ivy 缓存 (~/.ivy2/cache) 中也是如此。似乎 Ivy 正在尝试连接到 Maven 存储库以刷新 changing="true" 依赖项。
我得到的错误类似于以下内容:
[ivy:retrieve] You probably access the destination server through a proxy server that is not well configured.
[ivy:retrieve] You probably access the destination server through a proxy server that is not well configured.
[ivy:retrieve]
[ivy:retrieve] :: problems summary ::
[ivy:retrieve] :::: WARNINGS
[ivy:retrieve] Host repo.example.com not found. url=http://repo.example.com/exampleorg/examplename/examplerev/ivys/ivy.xml
[ivy:retrieve] Host repo.example.com not found. url=http://repo.example.com/exampleorg/examplename/examplerev/jars/examplename.jar
[ivy:retrieve] module not found: exampleorg#examplename;examplerev
[ivy:retrieve] ==== local: tried
[ivy:retrieve] ~/.ivy2/local/exampleorg/examplename/examplerev/ivys/ivy.xml
[ivy:retrieve] -- artifact exampleorg#examplename;examplerev!examplename.jar:
[ivy:retrieve] ~/.ivy2/local/exampleorg/examplename/examplerev/jars/examplename.jar
[ivy:retrieve] ==== shared: tried
[ivy:retrieve] ~/.ivy2/shared/exampleorg/examplename/examplerev/ivys/ivy.xml
[ivy:retrieve] -- artifact exampleorg#examplename;examplerev!examplename.jar:
[ivy:retrieve] ~/.ivy2/shared/exampleorg/examplename/examplerev/jars/examplename.jar
[ivy:retrieve] ==== repo: tried
[ivy:retrieve] http://repo.example.com/exampleorg/examplename/examplerev/ivys/ivy.xml
[ivy:retrieve] -- artifact exampleorg#examplename;examplerev!examplename.jar:
[ivy:retrieve] http://repo.example.com/exampleorg/examplename/examplerev/jars/examplename.jar
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: UNRESOLVED DEPENDENCIES ::
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: exampleorg#examplename;examplerev: not found
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]
[ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
BUILD FAILED
~/exampleproj/build.xml:123: impossible to resolve dependencies:
resolve failed - see output for details
按照警告的建议运行 ant -verbose resolve 会在输出中打印以下行:
[ivy:retrieve] don't use cache for exampleorg#examplename;examplerev: changing=true
如何让 Ivy 在离线时从缓存中解析 changing="true" 依赖项,但在在线时继续查询每个构建的存储库?
【问题讨论】:
-
我在这个问题中给出了答案:stackoverflow.com/questions/6971517/…
-
这是第二个问题。第一个已经回答了
-
@Mark:你是对的。我编辑了问题以删除“如何有条件地设置
ivy.cache.ttl.default=eternal?”部分原因是这是一个单独的问题。但是我最初的问题——离线时如何解决依赖关系——仍然没有答案。 -
好像变了和ttl不能一起用,在mailing list问这个问题可能是个好主意