欢迎为 Fess 项目做出贡献! 本页面说明对 Fess 的贡献方法、社区指南、 拉取请求的创建步骤等。
开始
Fess 是一个开源项目, 通过社区的贡献而成长。 无论编程经验水平如何,任何人都可以做出贡献。
贡献方法
可以通过各种方式为 Fess 做出贡献。
代码贡献
添加新功能
修复错误
性能改进
重构
添加测试
文档贡献
改进用户手册
添加・更新 API 文档
创建教程
翻译
Issue 报告
错误报告
功能请求
问题或建议
社区活动
GitHub Discussions 的讨论
在论坛回答问题
撰写博客文章或教程
活动演讲
首次贡献
如果是第一次为 Fess 做出贡献,建议按照以下步骤进行。
Step 1: 理解项目
在 Fess 官方网站 确认基本信息
通过 开源全文检索服务器 - Fess 开发概述 理解开发概述
通过 架构和代码结构 学习代码结构
Step 2: 查找 Issue
在 GitHub 的 Issue 页面 查找带有 good first issue 标签的 Issue。
这些 Issue 是适合初次贡献者的相对简单的任务。
Step 3: 设置开发环境
按照 开发环境设置 构建开发环境。
Step 4: 创建分支并开始工作
按照 开发工作流程 创建分支并开始编码。
Step 5: 创建拉取请求
提交更改并创建拉取请求。
编码规范
Fess 为了维护一致的代码, 遵循以下编码规范。
Java编码风格
基本风格
缩进: 4个空格
换行符: LF(Unix 风格)
编码: UTF-8
行长度: 建议在140字符以内
命名规则
包: 小写,点分隔(例:
org.codelibs.fess)类: PascalCase(例:
SearchService)接口: PascalCase(例:
Crawler)方法: camelCase(例:
executeSearch)变量: camelCase(例:
searchResult)常量: UPPER_SNAKE_CASE(例:
MAX_SEARCH_SIZE)
注释
Javadoc:
对 public 的类、方法、字段编写 Javadoc。
实现注释:
对复杂的逻辑,添加中文或英文注释。
类和方法的设计
单一职责原则: 一个类只有一个职责
小方法: 一个方法只做一件事
有意义的名称: 类名、方法名要明确表达意图
异常处理
null 的处理
尽可能不返回
null推荐使用
Optional用
@Nullable注解明确 null 的可能性
测试的编写
为所有 public 方法编写测试
测试方法名以
test开头使用 Given-When-Then 模式
代码审查指南
拉取请求的审查流程
自动检查: CI 自动执行构建和测试
代码审查: 维护者审查代码
反馈: 根据需要请求修改
批准: 审查获得批准
合并: 维护者合并到 main 分支
审查要点
审查时会确认以下要点:
功能性
是否满足需求
是否按预期工作
是否考虑了边界情况
代码质量
是否遵循编码规范
代码是否易读易维护
抽象是否适当
测试
是否编写了充分的测试
测试是否通过
测试是否进行了有意义的验证
性能
对性能是否有影响
资源使用是否适当
安全性
是否存在安全问题
输入验证是否适当
文档
必要的文档是否更新
Javadoc 是否适当编写
对审查意见的回应
对审查意见要迅速且礼貌地回应。
需要修改时:
需要讨论时:
拉取请求的最佳实践
PR 的大小
力求小而易于审查的 PR
一个 PR 包含一个逻辑变更
大的更改分成多个 PR
PR 的标题
使用清晰且描述性的标题:
PR 的描述
包含以下信息:
更改内容: 更改了什么
原因: 为什么需要这个更改
测试方法: 如何测试的
截图: UI 更改的情况
相关 Issue: Issue 编号(例: Closes #123)
提交消息
编写清晰且描述性的提交消息:
例:
Draft PR 的活用
将进行中的 PR 创建为 Draft PR, 完成后改为 Ready for review。
社区指南
行为准则
Fess 社区遵守以下行为准则:
尊重: 尊重所有人
协作: 提供建设性反馈
开放: 欢迎不同的观点和经验
礼貌: 注意使用礼貌的措辞
沟通
提问的地方:
GitHub Discussions: 一般问题和讨论
Issue 跟踪器: 错误报告和功能请求
Fess Forum: 日语论坛
提问方法:
具体提问
说明尝试过的方法
包含错误消息或日志
注明环境信息(OS、Java 版本等)
回答方法:
礼貌、友好
提供具体的解决方案
提供参考资料的链接
感谢的表达
对贡献表示感谢。 即使是小的贡献,对项目也是有价值的。
常见问题
Q: 初学者也可以贡献吗?
A: 可以,欢迎!建议从带有 good first issue 标签的 Issue 开始。 文档改进也是适合初学者的贡献。
Q: 拉取请求大约多久会被审查?
A: 通常在几天内审查。 但根据维护者的时间安排可能会有所变化。
Q: 如果拉取请求被拒绝了怎么办?
A: 确认被拒绝的原因,根据需要修改后可以重新提交。 如有不明白的地方,请随时提问。
Q: 如果违反了编码规范怎么办?
A: 会在审查中指出,所以修改即可。 可以通过运行 mvn formatter:format 来提前检查和修正代码格式。此外,还可以通过 mvn license:format 自动整理许可证头。
Q: 如果想添加大功能怎么办?
A: 建议先创建 Issue,讨论建议内容。 通过事先达成共识可以避免工作的浪费。
Q: 可以用日语提问吗?
A: 可以,日语或英语都可以。 Fess 是日本发起的项目,所以日语支持也很充实。
贡献类型别指南
文档改进
Fork 文档仓库:
进行更改
创建拉取请求
错误报告
搜索现有 Issue 确认是否重复
创建新 Issue
包含以下信息:
错误描述
重现步骤
预期行为
实际行为
环境信息
功能请求
创建 Issue
说明以下内容:
功能描述
背景和动机
建议的实现方法(可选)
代码审查
审查他人的拉取请求也是一种贡献:
找到感兴趣的 PR
确认代码
提供建设性反馈
许可证
Fess 在 Apache License 2.0 下发布。 贡献的代码也适用相同的许可证。
通过创建拉取请求, 视为您同意您的贡献在此许可证下发布。
致谢
感谢您对 Fess 项目的贡献! 您的贡献使 Fess 成为更好的软件。
下一步
准备好贡献后:
参考资料
社区资源
GitHub: codelibs/fess
Discussions: GitHub Discussions
Forum: Fess Forum
Twitter: @codelibs
Website: fess.codelibs.org