概述
本节介绍 Fess 的扩展开发。 提供插件开发、自定义连接器创建、主题定制等 扩展 Fess 所需的信息。
目标读者
想要开发 Fess 自定义功能的开发者
想要创建插件的开发者
想要理解 Fess 源代码的开发者
前提知识
Java 21的基本知识
Maven(构建系统)基础
Web应用程序开发经验
OpenSearch的基本知识(Fess 使用OpenSearch作为搜索引擎)
开发环境
推荐环境
JDK: OpenJDK 21以上
IDE: IntelliJ IDEA / Eclipse / VS Code
构建工具: Maven(构建过程未强制规定最低版本,但推荐使用支持Java 21的较新3.x版本)
Git: 版本管理
OpenSearch: 搜索引擎后端(从IDE启动时,所需的模块和插件会在构建时下载)
环境配置
Fess 作为Maven项目进行构建。开发时最简单的方式是从IDE启动。
获取源代码:
导入到IDE:
将获取到的目录作为Maven项目导入到IDE中。
下载OpenSearch所需的模块和插件:
仅首次需要执行以下命令,将搜索引擎的模块和插件获取到
plugins目录中。启动开发服务器(从IDE):
在IDE中运行或以调试方式运行
org.codelibs.fess.FessBoot, 然后在浏览器中打开 http://localhost:8080/。 管理界面为 http://localhost:8080/admin/ (初始账号:admin/admin)。构建软件包(生成分发包):
如果需要分发包,请执行
package目标。 生成的成果物会输出到target/releases中(如需跳过单元测试,请添加-DskipTests)。展开生成的分发包后,即可使用
bin/fess启动脚本。
Note
bin/fess 启动脚本包含在分发包(zip/rpm/deb)中。 仅在源代码目录中执行 mvn package,并不会在仓库根目录下生成 bin/fess。 在基于源代码进行开发时,请按照上文所述在IDE中运行 FessBoot, 或使用展开后的分发包中的 bin/fess。
架构概述
Fess 由以下主要组件构成:
组件构成
| 组件 | 说明 |
|---|---|
| Web层 | 基于LastaFlute框架的MVC实现 |
| 服务层 | 业务逻辑 |
| 数据访问层 | 通过DBFlute(ESFlute/FreeGen)实现的类型安全的OpenSearch访问 |
| 爬虫 | 使用fess-crawler库进行内容收集 |
| 搜索引擎 | 基于OpenSearch的全文搜索 |
主要框架
LastaFlute: Web框架(Action、Form、Validation)
DBFlute: 数据访问框架。面向OpenSearch的类型安全访问类(
Bhv/ConditionBean) 由DBFlute的FreeGen功能与ESFlute模板生成 (重新生成命令为mvn dbflute:freegen)Lasta Di: 依赖注入容器
目录结构
扩展点
Fess 提供以下扩展点:
插件
使用插件可以添加功能。
数据存储插件: 从新数据源进行爬取(继承
AbstractDataStore)脚本引擎插件: 支持新的脚本语言(实现
ScriptEngine)Web应用插件: 扩展Web界面(通过Lasta Di的组件覆盖与资源合并)
Ingest插件: 索引时的数据加工(继承
Ingester)
详情: 插件架构
Note
Fess 本体以 war 形式打包。在本地构建插件时, 如果无法将 Fess 解析为依赖项,请将 pom.xml 中的 <packaging> 临时改为 jar, 执行 mvn clean install -DskipTests,然后再改回 war。
主题
可以自定义搜索界面的设计。
详情: 主题开发指南
配置
可以通过 fess_config.properties 自定义许多行为。
详情: 配置简介
插件开发
有关插件开发的详细信息,请参阅以下内容:
主题开发
主题开发指南 - 主题自定义
最佳实践
编码规范
遵循 Fess 现有的代码风格
使用
mvn formatter:format格式化代码使用
mvn license:format添加许可证头
测试
单元测试(
*Test.java): 在默认的build配置文件下作为mvn test执行集成测试(
*Tests.java): 通过mvn test -P integrationTests执行。 执行集成测试需要运行中的 Fess 服务器与OpenSearch
日志
使用Log4j2
logger.debug()/logger.info()/logger.warn()/logger.error()不要在日志中输出敏感信息