java plug机制_插件机制 - OpooPress - 基于 Java 的静态博客生成器

插件机制

通过插件机制可以很容易的扩展 OpooPress 博客系统的功能。 Plugin 定义如下

public interface Plugin{

/**

*

* @param registry

*/

void initialize(Registry registry);

}

Registry 接口定义如下:

public interface Registry {

Site getSite();

void registerConverter(Converter c);

void registerGenerator(Generator g);

void registerSiteFilter(SiteFilter filter);

void registerTemplateModel(String name, TemplateModel model);

void registerTemplateLoader(TemplateLoader loader);

}

可见,要自定义插件,主要就是实现 Plugin 接口 的 initialize() 方法。在该方法中,开发者可以调用 Registry 对象注册自定义的组件。这些自定义的组件包括:Converter、Generator、SiteFilter、TemplateModel、TemplateLoader 等。

Converter

格式转化器。

主要用来转化博客或者网站的源文件。OpooPress 默认支持 Markdown 和 Textile 格式,分别由 org.opoo.press.converter.TxtmarkMarkdownConverter 和 org.opoo.press.converter.TextilejConverter 进行处理。

开发者可自定义 Converter 来替换现有的转化器,或者支持新格式。例如可以开发 WikiConverter 用于支持 *.wiki 文件的处理。

Generator

页面生成器。

主要用于生成特定的输出页面,如 博客首页分页页面、标签页面、分类目录页面等。

开发者可以自定义 Generator 来生成所需的页面,例如生成站点地图文件 sitemap.xml 和 sitemaps.html。

SiteFilter

站点过滤器(处理器)。

用于在站点(site)生成引擎运行的各个阶段中插入自己的处理代码,这些可插入代码的点为 setup, read, generate, reader, write。

该接口的定义详见源文件 SiteFilter.java,可查看 SiteImpl 类源文件了解 SiteFilter 是如何以及何时被调用的。

TemplateModel

自定 FreeMarker 模板模型。

开发者可以通过这个机制自定义 FreeMarker 标签并注册,就可以在文章或者页面中调用这些标签。请阅读 FreeMarker 文档了解详情。

TemplateModel 还可以用来自定义函数,同样注册后可在页面中调用。例如 TitleCaseModel。

TemplateLoader

FreeMarker TemplateLoader,用于指定注册自定义的 FreeMarker 模板加载器。

DefaultPlugin

目前 OpooPress 默认的生成引擎也是通过插件机制实现的,默认插件为 DefaultPlugin,该插件会自动查找站点配置文件 config.yml 中定义的 Converter、Generator、SiteFilter 类名,实例化这些类并自动注册。

config.yml 关于 DefaultPlugin 的配置如下:

# ------------------------ #

# Default PlugIn Settings #

# ------------------------ #

converters:

- org.opoo.press.converter.TxtmarkMarkdownConverter

- org.opoo.press.converter.TextilejConverter

generators:

- org.opoo.press.generator.PaginationGenerator

- org.opoo.press.generator.CategoryGenerator

- org.opoo.press.generator.TagGenerator

# siteFilters:

# - org.opoo.press.filter.FixUrlSiteFilter

如果开发者不打算定义一个完整的 Plugin,仅仅开发 Converter 或者 Generator,可以在这里进行配置,而不必配置整个插件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运放放大倍数计算公式_19.运算放大器的特性与应用,不得不掌握的知识点(一)...

运算放大器,简称“运放”,是电力电子中最重要的器件之一,主要作用为:信号放大、信号运算、信号处理、波形的产生和变换。一、运算放大器的内部结构集成运算放大器内部结构集成运算放大器内部一般由四个单元组成,各单元…

java选项设置_java环境配置

javac无法执行检查:看看java 相关的java相关路径有没有多余的符号,比如多出分号,逗号(笔者上面是正确的路径展示形式)Win10下 Java环境变量配置首先,你应该已经安装了 Java 的 JDK 了(如果没有安装JDK,请跳转到此网址&…

teleport 组件的作用_人脸识别综述! 覆盖人脸检测,预处理和特征表示三大核心组件!...

The Elements of End-to-end Deep Face Recognition: A Survey of Recent Advances 人脸识别是计算机视觉社区中最基础和历史悠久的话题之一。随着深度卷积网络和大尺度数据集发展,深度人脸识别取得极大进步并且应用到许多领域。给定一个自然图像或者视频帧作为输入…

itunes未能连接到iphone_iTunes下载_苹果iTunes官方下载「32位|64位」

iTunes是苹果官方推出的Apple官方数字媒体播放与管理应用程序。苹果iTunes官方下载中文版能将您所有的媒体文件和应用收藏导入iPad和iPhone,您还可以通过它购买应用、数字音乐、视频、电视及游戏等等。iTunes是目前最专业的iPad和iPhone管理应用工具。本站提供苹果i…

java短视频上传阿里云流程_短视频上传

启动上传前需要设置上传回调,需要实现VODSVideoUploadCallback回调:vodsVideoUploadClient.uploadWithVideoAndImg(vodSessionCreateInfo, new VODSVideoUploadCallback() {Overridepublic void onUploadSucceed(String videoId, String imageUrl) {//上…

feko软件_计算电磁学各种方法和电磁仿真软件简述

计算电磁学中有众多不同的算法,如时域有限差分法(FDTD)、时域有限积分法(FITD)、有限元法(FE)、矩量法(MoM)、边界元法(BEM)、 谱域法(SM)、传输线法(TLM)、模式匹配法(MM)、横向谐振法(TRM)、线方法(ML)和解析法等等。在频域,数值算法有:有限…

出租车管理系统java_基于jsp的出租车管理系统-JavaEE实现出租车管理系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的出租车管理系统, 该项目可用各类java课程设计大作业中, 出租车管理系统的系统架构分为前后台两部分, 最终实现在线上进行出租车管理系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类出租车管理系统相…

cad常青藤插件_原来还有这么好用的CAD插件,半小时就能做完一张图

作为一名优秀的设计师或者建筑师,如果你没用过逆天的CAD插件,我觉得不行,所以下面小编就给大家推荐几个非常好用的CAD插件,希望可以帮助大家大幅提升工作效率。接下来小编就带大家一起看看吧!1、天正建筑天正建筑顾名思…

java 停止线程播放音频_Notification 播放 关闭 声音----转载

NotificationPlayer.java定义一个播放Notification声音的player,本质上仍然是一个MediaPlayer,这个是多线程编程的很好的例子public class NotificationPlayer implements OnCompletionListener {//发送播放和停止的cmdprivate static final int PLAY 1…

java main是标识符吗_main方法的认识 、通配符、java的注释、java的符(标识符)【Java基础】...

main方法的认识print()和println()的区别print()打印不换行println()打印并换行通配符\n换行符\t制表符都应用于控制台\n换行\t以表格的形式显示System.out.println("----------英雄排行榜------------");System.out.println("\t|编号\t|名字\t|战力值\t|"…

对于半圆形的点击区域该怎么做_十堰混合型塑胶跑道怎么选,橡胶跑道卷材型号...

河北迈弘体育设施有限公司为您详细解读hVgkXc十堰混合型塑胶跑道怎么选的相关知识与详情,校园跑道、体育馆田径跑道等都是体育活动的首先场合。由于终年正在室外遭到风吹日晒,还要接受日常体育活动的摩擦、描写、化学物量腐蚀或重物挤压等因素&#xff0…

希望得到学术会议的及时回复该怎么说_张烨:在“选矿”博士的世界里,脚踏实地从来都不是说说而已!| 中南达人NO.188...

张烨资源加工与生物工程学院矿业工程2017级博士中南大学2019年大学生年度人物之一获奖经历(部分)2016年中南大学FMG奖励金优秀学生奖2017年中南大学优秀毕业生2018年中南大学优秀学生2019年中南大学优秀学生博士研究生国家奖学金中南大学大学生年度人物2017-2019年博士一等学业…

java编写一个集合类_Java集合类

数组是一种很常见的数据结构,开始接触编程的时候多数程序都和数组相关。刚开始接触Java时也是一直使用数组写一些程序,后来越来越觉得数组这东西没法满足需求了,这时一位“前辈”对我说了一句:不会用集合类就等于没学过Java。然后…

python 当前文件路径获取方式_Python获取当前文件路径

一. Python 获取当前文件路径方法2. sys.path[0]获取文件当前工作目录路径(绝对路径)sys.argv[0]|获得模块所在的路径(由系统决定是否是全名)若显示调用python指令,如python demo.py,会得到绝对路径;若直接执行脚本,如./demo.py,会…

pdf不支持64位浏览器_4MLinux 31.0 发布,不支持32位

Zbigniew Konojacki宣布发布4MLinux 31.0,这是该项目极简发行版的新稳定版本,专注于四个功能:维护(作为系统救援Live CD),多媒体(用于播放视频DVD和其他多媒体文件),迷你服务器(使用inetd守护程序)和神秘的版本(提供几…

java期末考试2013及答案_java笔试经典(题及答案)2013.doc

java笔试经典(题及答案)2013.doc Java笔试经典(基础部分及答案和分析)1、一个“.java“源文件中是否可以包括多个类(不是内部类)?有什么限制?7答:可以包括多个类,但是最多只能有一个public修饰的类。2、Java有没有goto?7答:java中…

datatables 行分组信息展开与折叠的功能实现_[LaTeX 尝试] fancyvrb - 修复行引用的超链接跳转位置

本文已加入专栏文章目录,归入「进阶使用」文章系列。本文可以看作对这个发生于 2019 年 7 月中旬的 TeX-SX 上自问自答的展开说明。那个回答中避免了 python 的使用,而是利用 zref 宏包把位置信息以文本形式在 pdf 中呈现,好处是不用引入 pyt…

qtcreator摄像头显示时间_三星Galaxy S11 +渲染器展现出巨大的相机凹凸和四边形曲面显示...

我们正接近一年中三星宣布其Galaxy S系列最新设备的时间。Galaxy S10系列被认为是三星发布的最好的版本之一,因此在这方面他们有很多重要的事情。我们已经看到了Galaxy S11和Galaxy S11e的渲染,但是现在我们首先来看看Galaxy S11 。三星Galaxy S11 与其他…

php源码安装配置,php源码安装时configure配置参数 | 学步园

在Linux下安装PHP,源代码方式安装,总需要配置很多参数。这里列出常用配置参数,并详细用中文解释说明了。给大家一些参考./configure–prefix/usr/local/PHP php 安装目录–with-apxs2/usr/local/apache/bi…

python递归函数详解-讲解Python中的递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: ? 1 fact(n) n! 1 x2 x3 x ... x …