【问题标题】:Resolving Apache Ivy dependencies when offline/disconnected?离线/断开连接时解决 Apache Ivy 依赖项?
【发布时间】: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问这个问题可能是个好主意

标签: java ant ivy


【解决方案1】:

oers 已经回答了这个问题,但并不明显。

尝试从命令行运行您的构建,设置 ivy.cache.ttl.default 属性:

ant -Divy.cache.ttl.default=eternal build

来源:

【讨论】:

  • 我希望你不介意,我用你在这里提供的一些信息更新了我的答案,以改进它。
  • 感谢您的回答。不幸的是,-Divy.cache.ttl.default=eternal 对我不起作用。请查看更新后的问题。
  • @RichardHansen 看起来你的构建没有像预期的那样缓存......你能发布你的常春藤设置吗?当我测试我的 ivy 构建时,它在没有任何特殊设置的情况下离线工作:-((还有你使用的是什么版本的 ivy?)
  • 我知道为什么eternal 不起作用:依赖项被标记为changing="true"。查看更新的问题。
猜你喜欢
  • 2018-12-05
  • 2016-10-11
  • 2011-02-18
  • 2010-10-28
  • 2011-12-10
  • 2011-11-13
  • 2012-07-07
  • 2012-05-20
  • 2019-03-17
相关资源
最近更新 更多