Nutch 1.14执行ant runtime时ivy:resolve失败求助
Nutch 1.14 构建时 Ivy 依赖问题的解决方案
核心问题回应
首先明确:Nutch 1.14 官方构建流程深度依赖 Ivy 进行依赖管理,完全绕开 Ivy 几乎不可行。手动收集所有依赖、修改 Ant 脚本移除 Ivy 任务的工作量极大,还容易出现依赖版本冲突、缺失等问题,不建议尝试。我们还是聚焦于解决当前的 Ivy 报错问题。
环境信息确认
- Java:
java version "1.8.0_141" Java(TM) SE Runtime Environment (build 1.8.0_141-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode) - Ant:
Apache Ant(TM) version 1.10.1 compiled on February 2 2017 - Nutch: 1.14 源码包
错误分析
初始错误:Maven 中央仓库连接超时
从日志看,Ivy 无法访问 repo1.maven.org 下载 slf4j-api:1.6.1 的 POM 文件,触发了 Connection timed out 异常,这通常是网络不通、防火墙限制或者代理未配置导致的。
后续错误:主机名异常依赖查找
手动下载依赖后出现的 working@MYHOSTNAME 相关错误,是因为 Ivy 的依赖版本被错误替换,大概率是缓存损坏或者配置文件被意外修改导致的。
分步解决方案
1. 修复网络连接问题(解决超时)
方案一:切换国内 Maven 镜像
修改 Nutch 源码目录下的 ivy/ivysettings.xml 文件,将默认的 Maven 中央仓库替换为国内镜像(比如阿里云):
<!-- 找到原有的 maven2 resolver,替换 root 属性 --> <ibiblio name="maven2" m2compatible="true" root="http://maven.aliyun.com/nexus/content/groups/public/"/>
方案二:配置代理(如果处于代理环境)
如果你的机器需要通过代理访问外网,执行 Ant 命令时添加代理参数:
ant -Dhttp.proxyHost=你的代理地址 -Dhttp.proxyPort=代理端口 runtime
如果代理需要认证,再加上:
ant -Dhttp.proxyHost=你的代理地址 -Dhttp.proxyPort=代理端口 -Dhttp.proxyUser=用户名 -Dhttp.proxyPassword=密码 runtime
2. 修复主机名异常依赖问题
步骤一:清理 Ivy 缓存
删除本地 Ivy 缓存目录,避免损坏的缓存干扰:
rm -rf ~/.ivy2/cache
步骤二:检查并恢复 Ivy 配置
- 重新解压 Nutch 1.14 源码包,确保
ivy.xml和ivysettings.xml是原始状态,没有被错误修改。 - 重新执行
ant runtime,让 Ivy 重新下载所有依赖。
验证
完成上述步骤后,再次执行 ant runtime,如果一切正常,Ivy 会成功下载所有依赖,Ant 会完成 Runtime 环境的构建。
内容的提问来源于stack exchange,提问作者Quent
相关产品推荐
相关产品推荐

