2012-03-09 25 views
12

如何在离线/断开连接时,让Ivy从本地缓存中解析依赖项(包括与changing="true"之间的依赖关系)?解决脱机/断开连接时解决Apache Ivy依赖问题?

我正在开发一个基于Java的开源项目,该项目使用Apache Ivy来解决和下载第三方依赖关系。该项目的build.xml有一个名为resolve的蚂蚁目标,它下载Ivy(如果需要),然后使用Ivy检索所需的罐子。

在线时一切正常。但是,如果没有Internet访问,ant resolve即使所需的罐子在本地Ivy缓存中(~/.ivy2/cache)也会失败。看来,常春藤试图连接到Maven存储库以刷新changing="true"依赖关系。

我得到的错误是类似以下内容:

[ivy:retrieve] don't use cache for exampleorg#examplename;examplerev: 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被警告打印输出以下行的建议changing="true"脱机时从缓存的依赖关系,但在线时继续查询每个版本库?

+1

我在那里给出了答案这个问题:http://stackoverflow.com/questions/6971517/how-do-i-tell-ivy4r-to-stay-offline – oers 2012-03-09 07:14:07

+0

这是第二个问题。第一个已经回答了 – 2012-03-11 17:29:02

+0

@Mark:你说得对。我编辑了这个问题,删除了“如何有条件地设置'ivy.cache.ttl.default = eternal'?”部分原因是这是一个单独的问题。但我最初的问题 - 如何解决脱机时的依赖关系 - 仍然没有答案。 – 2012-03-12 00:26:00

回答

11

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

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

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

来源:

+0

问这个问题可能是个好主意,我希望你不介意,我用你在这里给出的一些信息更新了我的答案,以改进它。 – oers 2012-03-09 12:40:06

+0

@oers根本不介意。 – 2012-03-09 18:46:52

+0

感谢您的回答。不幸的是,'-Divy.cache.ttl.default = eternal'不适用于我。请参阅最新的问题。 – 2012-03-10 05:31:26