Nutch 1.0 源代码分析[3] Plugin(2)

 Nutch 1.0 源代码分析[3] Plugin(2) 

来自: http://c.tieba.baidu.com/p/3439551436

在URLNormalizers构造函数中,有一句没有看:

this.extensionPoint =PluginRepository.get(conf).getExtensionPoint(

URLNormalizer.X_POINT_ID);

看一下PluginRepository.get函数:

public
static synchronized
PluginRepository get(Configuration conf) {

PluginRepository result = CACHE.get(conf);

if (result ==null) {

result = newPluginRepository(conf);

CACHE.put(conf,result);

}

returnresult;

}

先试着从CACHE取,如果没有被缓存过,那么就调用PluginRepository的构造函数:

publicPluginRepository(Configuration conf)throwsRuntimeException {

fActivatedPlugins =newHashMap<String, Plugin>();

fExtensionPoints =newHashMap<String, ExtensionPoint>();

this.conf =conf;

this.auto =conf.getBoolean("plugin.auto-activation",true);

String[] pluginFolders = conf.getStrings("plugin.folders");

PluginManifestParsermanifestParser = new PluginManifestParser(conf,

this);

Map<String, PluginDescriptor>allPlugins = manifestParser

.parsePluginFolder(pluginFolders);

Pattern excludes = Pattern.compile(conf.get("plugin.excludes",""));

Pattern includes = Pattern.compile(conf.get("plugin.includes",""));

Map<String, PluginDescriptor>filteredPlugins = filter(excludes,

includes, allPlugins);

fRegisteredPlugins =getDependencyCheckedPlugins(filteredPlugins,

this.auto ?allPlugins : filteredPlugins);

installExtensionPoints(fRegisteredPlugins);

try {

installExtensions(fRegisteredPlugins);

} catch(PluginRuntimeException e) {

LOG.fatal(e.toString());

thrownewRuntimeException(e.getMessage());

}

displayStatus();

}

这里拷贝一点《Nutch插件系统浅析》里的介绍:

1.       plugin.folders:插件所在的目录,缺省位置在 plugins 目录下。

<property>

<name>plugin.folders</name>

<value>plugins</value>

</property>

2.       plugin.auto-activation:当被配置为过滤(即不加载),但是又被其他插件依赖的时候,是否自动启动,缺省为 true。

<property>

<name>plugin.auto-activation</name>

<value>true</value>

</property>

3.        plugin.includes:要包含的插件名称列表,支持正则表达式方式定义。

<property>

时间: 2024-11-07 11:21:39

Nutch 1.0 源代码分析[3] Plugin(2)的相关文章

Nutch 1.0 源代码分析[2] Plugin(1)

借着URLNormalizers看一下Nutch的插件机制,在Injector类中的configure类中有一句是: urlNormalizers = newURLNormalizers(job, URLNormalizers.SCOPE_INJECT); 它调用的是: publicURLNormalizers(Configuration conf, String scope) { this.conf =conf; this.extensionPoint =PluginRepository .g

Nutch 1.0 源代码分析[8] CrawlDb

Nutch 1.0 源代码分析[8] CrawlDb 24MAR 2010 18:44:08 +0800 ---------------------------------------------------------------------------- 再接下来Crawl类中的重要的一行就是: http://c.tieba.baidu.com/p/3312872854 http://c.tieba.baidu.com/p/3312894881 http://c.tieba.baidu.co

Nutch 1.0 源代码分析[1] Injector

在Crawl中的main函数中有一句是: // initializecrawlDb injector.inject(crawlDb, rootUrlDir); 引用[李阳]:inject操作调用的是nutch的核心包之一crawl包中的类Injector. inject操作主要作用: 1.       将URL集合进行格式化和过滤,消除其中的非法URL,并设定URL状态(UNFETCHED),按照一定方法进行初始化分值: 2.       将URL进行合并,消除重复的URL入口: 3.     

Nutch 1.0 百度贴吧源代码分析[3] Plugin(2)

在URLNormalizers构造函数中,有一句没有看: this.extensionPoint =PluginRepository.get(conf).getExtensionPoint( URLNormalizer.X_POINT_ID); 看一下PluginRepository.get函数: public static synchronizedPluginRepository get(Configuration conf) { PluginRepository result = CACHE

区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令二

区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令二.flogging,即:fabric logging,为Fabric基于第三方包go-logging封装的日志包,go-logging使用方法参考:github.com/op/go-logging如下代码为flogging包的初始化函数: func init() { ????logger = logging.MustGetLogger(pkgLogID) //创建仅在flogging包内代码使用的logging.Lo

兄弟连区块链教程Fabric1.0源代码分析ledgerID数据

1.idStore概述 Fabric支持创建多个Ledger,不同Ledger以ledgerID区分. 多个ledgerID及其创世区块存储在idStore数据库中,idStore数据库基于leveldb实现. idStore默认使用路径:/var/hyperledger/production/ledgersData/ledgerProvider/. idStore库中特殊key "underConstructionLedgerKey",用于标志最新在建的ledgerID,ledger

区块链教程Fabric1.0源代码分析Ledger historydb历史数据库

1.historydb概述 historydb,用于存储所有块读写集中写集的内容.代码分布在core/ledger/kvledger/history/historydb目录下,目录结构如下: historydb.go,定义核心接口HistoryDBProvider和HistoryDB. histmgr_helper.go,historydb工具函数. historyleveldb目录,historydb基于leveldb的实现.???? historyleveldb.go,HistoryDBPr

[caffe]linux下安装caffe(无cuda)以及MNIST EXAMPLE

昨天在mac上折腾了一天都没有安装成功,晚上在mac上装了一个ParallelDesktop虚拟机,然后装了linux,十分钟就安装好了,我也是醉了=.= 主要过程稍微记录一下: 1.安装BLAS sudo apt-get install libatlas-base-dev 2.安装依赖项 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5

[转]UIApplicationDelegate分析小结

转载地址:http://www.apkbus.com/android-131646-1-1.html 我们开发出来的运行在iOS平台上的应用程序都有一个UIApplication类的对象.1.是iOS应用程序的起始点,并负责初始化和显示UIWindow:2.负责加载应用程序的第一个UIView到UIWindow中:3.帮助管理应用程序的生命周期:4.接收事件,再转给它的委托"UIApplicationDelegate"来处理:此委托可处理的事件包括:应用程序的生命周期事件如程序启动和关