Heritrix的Modules界面不能改变选择项的问题(涉及Scope, Frontier, PreProcessor, Fetcher, Extractor, Writer, PostProcessor)
2008-03-10 – 9:50 pm首先需要定位是在哪里确定显示这个页面的。这个页面上有几个标志字符串,例如“Select Writers”。在Eclipse中全局查找,发现这个页面是在webapps->admin->jobs下面的Modules.JSP生成的,其中有这么一个调用(我没用过JSP,猜想和Java语法差不多吧)
<p>
<b>Select Writers</b>
<i>Processors that write documents to archive files</i>
<p>
<%=buildModuleMap(
(ComplexType)settingsHandler.getOrder().getAttribute(
CrawlOrder.ATTR_WRITE_PROCESSORS),
Processor.class,
“Writers”)%>
看样子选择部分就是靠这个buildModuleMap来生成的,这个函数的定义在webapps->admin->includes->modules.jsp(还有一个在webapps->admin->includes->jobcredentials.jsp,但是通过加打印发现调用的是这个)。其中主要有3部分功能,第一部分用于显示现在已经选择的项目,第二部分是统计还有多少可以选择的配置项目,第三部分就是如果判断还有可以选择的配置项目,就显示让用户选择。跟踪发现就是第二部分数出的数字unusedOptions.size()是0,所以第三部分没有得到调用。再向前跟踪,发现第二部分的循环是基于函数第一句的一个变量定义来的,List availableOptions = getOptionsForType(allowableType),这里的availableOptions里面的元素个数是0,造成第二部分也没有执行。现在看起来问题就是出在getOptionsForType(allowableType)没有返回需要的列表。
进入 getOptionsForType函数,基本一眼就可以看出问题了。这个函数里面除了return CrawlJobHandler.loadOptions(optionsFilename);一句有意义的话以外,就是前面的设置变量和后面的Exception处理了。基本猜测就是出了Exception。加打印看了一下(发现Eclipse可以直接修改代码不重启就生效,和解释语言差不多了),果然是在Classpath没有找到需要的文件。看了一下,找相关的Options文件是在Modules相对路径下的,而Modules目录是在conf目录下。在Eclipse里面设置conf为Classpath。再试,在Modules页面中的功能正常了。
简单来看,这真的是一个小问题。但是却用了我差不多4个小时。实际还是网上相关的资源太少了,例如我就没有找到一个详细一些地说如何在Eclipse下配置Heritrix的文章,只好自己写一篇了。而我实际对Eclipase和Heritrix都是新手。本文我写得这么详细,也就是希望能对万一遇到这个问题的朋友有个帮助。也希望大家能一起努力让网上的相关文章逐渐多起来。
Popularity: 49% [?]
Pages: 1 2
03月 14th, 2008 at 11:41 am
[…] 在Classpath标签页中,增加conf为Classpath。这样就可以找到相应的配置文件。否则会遇到奇怪的问题(参见:Heritrix的Modules界面不能改变选择项的问题) […]
05月 23rd, 2008 at 8:07 am
我正在使用Heritrix,恰好遇到你说的这个问题了,你说的“在Eclipse里面设置conf为Classpath”是不是在ECLIPSE中将CONF目录BULID PATH,然后选择ADD CLASS FOLDER
05月 28th, 2008 at 3:49 am
就是这样样子的。
在Eclipse的Run Dialog中,Classpath标签Table,选中User Entries,然后右边会有Advance选项,选Add External Folder,把你的Conf加进去就行了。