离线/断开连接时解决Apache Ivy依赖关系?

当脱机/断开连接时,如何让Ivy从本地缓存中解析依赖关系(包括使用changing="true"依赖关系)?

我正在开发一个基于Java的开源项目,该项目使用Apache Ivy来解析和下载第三方依赖项。 项目的build.xml有一个名为resolve的ant目标,可以下载Ivy(如果需要),然后使用Ivy来检索所需的jar。

在线时一切都很棒。 但是,如果没有Internet访问,即使所需的jar文件位于本地Ivy缓存( ~/.ivy2/cache )中, ant resolve也会失败。 似乎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"依赖关系,但是在线时继续查询每个构建的存储库?

奥尔斯已回答了这个问题,但这并不明显。

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

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

资料来源:

  • IVY-879
  • 常春藤邮件列表