1 nutch bin目录结构
图1 nutch release包的目录结构
1) bin目录:主要含有2个可执行文件crawl和nutch脚本,其中crawl脚本只是nutch脚本的wrapper,提供了all-in-one(一站式)形式的调用方式,通过限定相对于种子url的相对深度的方式来结束爬取循环,本质上是逐个调用nutch脚本中的各个tool。
2) conf:含有nutch所有的配置文件,比较常用的是nutch-default.xml,nutch-site.xml和parse-plugins.xml文件。
3) docs:API doc文档。
4) lib:nutch运行时依赖包,不包含plugins需要的运行时依赖。
5) plugins:插件目录,nutch内置47种插件,其中nutch-extensionpoints插件,是nutch加插件机制运行机制的核心。
2 nutch源码目录结构
图2 nutch src包的目录结构
1) conf:同release的conf。
2) ivy:使用ivy管理nutch的依赖,ivy相关的配置文件位置。
3) lib:同release的lib。
4) src/bin:同release的bin。
5) src/java:nutch除了plugins以外的源码所在的位置,按照package组织。
6) src/test:nutch单元测试代码的位置,按package组织。
7) src/testresources:nutch单元测试资源文件位置。
8) plugins:插件源码位置。
3 nutch的编译
nutch采用ant编译,使用lvy管理项目依赖。执行anteclipse生成eclipse所需要的.classpath和.project文件;执行ant deploy会生成maven项目,会在nutch的根目录下生成pom文件。这样就可以直接使用IDE import“existing project”或者是“existing maven project”(如果是采用maven编译的话,则需要修改maven-compiler-plugin的source和target属性为1.6版本以上,以支持Annotation@Override,避免编译错误)。注意:nutch的plugin项目并没有maven化,故也没有作为nutch maven project的module。
3.1 FAQ
编译阶段可能会出现的问题如下:
1) Unsupported Java version: 1.6.x_xx. Javadoc requires Java version 7u25or greater.,由于frame injection相关的问题,nutch的编译脚本在调用javadoc命令生成项目的API文档之前,会检查系统JDK的版本,如果是JDK7u25之前的版本会终止build过程。升级成该版本以上的JDK即可。或者注释掉<fail>段的脚本(该方法本人未验证)。
2) failed to create task or typeantlib:org.apache.maven.artifact.ant:mvn。该问题是由于ant在运行时找不到mavenant task相关的jar包造成的,可以到http://maven.apache.org/ant-tasks/download.cgi下载最新的maven-ant-tasks-x.x.x.jar,然后放到$ANT_HOME/lib目录下即可(为了升级方便,linux下也可以将jar包移动到公共位置,在上述位置建立符号链接即可)