基于Github三件套设计一个分层架构方案,涵盖内容管理、自动化流程和功能扩展性:
AIGmeek/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── aigmeek/
│ │ │ ├── config/ # 配置中心(Spring Boot标准)
│ │ │ │ ├── GitHubConfig.java # OAuth认证配置
│ │ │ │ └── TemplateConfig.java # 模板引擎配置
│ │ │ ├── core/
│ │ │ │ ├── generator/ # 静态生成器(替代Python脚本)
│ │ │ │ │ ├── HtmlGenerator.java
│ │ │ │ │ └── SitemapBuilder.java
│ │ │ │ └── processor/ # 内容处理器
│ │ │ │ ├── IssueParser.java
│ │ │ │ └── MarkdownConverter.java
│ │ │ ├── github/ # API交互层
│ │ │ │ ├── client/
│ │ │ │ │ ├── IssueClient.java # 实现PyGithub功能
│ │ │ │ │ └── RepoClient.java
│ │ │ │ └── model/ # 数据模型(Record类型)
│ │ │ │ └── GIssue.java
│ │ │ └── web/
│ │ │ └── controller/ # 预览功能API端点
│ │ │ └── PreviewController.java
│ │ └── resources/
│ │ ├── static/ # 全量保留原前端资源
│ │ │ ├── css/
│ │ │ │ ├── style.css # 增强响应式布局
│ │ │ │ └── dark-mode.css # 支持2025新CSS特性
│ │ │ ├── js/
│ │ │ │ ├── plugins/ # 插件体系(热加载)
│ │ │ │ │ ├── lightbox.js # 图片灯箱优化版
│ │ │ │ │ └── vercount.js # 访问统计模块
│ │ │ │ └── GmeekTOC.js # 目录生成器
│ │ │ └── img/ # 静态资源托管
│ │ └── templates/ # Thymeleaf模板
│ │ ├── fragments/ # 模块化组件
│ │ │ ├── header.html
│ │ │ └── comment.html # 集成utteranc评论
│ │ ├── post.html # 文章页(支持SEO优化)
│ │ └── index.html # 首页(分页逻辑)
│ └── test/ # 测试套件
│ └── java/
│ └── com/
│ └── aigmeek/
│ └── core/
│ └── generator/ # 生成器单元测试
├── .github/ # 自动化流水线
│ └── workflows/
│ └── gh-pages.yml # 深度优化的Java构建流程
└── HELP.md # 新版文档(含AI助手指引)
一、核心架构分层
1.数据获取层
使用Github API Client for Java实现Issue数据抓取
public class IssueFetcher {
// 实现基于标签过滤的Issue查询(对应MD文档的标签要求)
public List<IssueDTO> fetchIssuesByLabel(String repo, String label);
// 解析Issue正文中的Markdown和元数据(参考post.html 模板)
public PostContent parseIssueBody(String markdownContent);
}
2.静态生成层
采用Thymeleaf模板引擎替代Jinja2
@Component
public class StaticGenerator {
// 生成文章页(集成lightbox.js 图片预览功能[13]())
public void generatePostPage(PostContent post, Path outputDir);
// 生成索引页(实现plist.html 的分页逻辑[1]())
public void generateIndexPage(List<PostContent> posts, int pageNum);
}
3.自动化部署层
集成Github Actions的Java实现方案
# .github/workflows/build.yml 核心配置
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Deploy to Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./target/generated-site
二、关键组件设计
1.配置中心
@Configuration
public class BlogConfig {
// 读取类似config.json 的配置(参考requirements.txt 依赖管理[3]())
@Value("${blog.baseUrl}")
private String baseUrl;
// 集成utteranc评论系统(对应post.html 的评论区块[9]())
@Bean
public CommentService commentService() {
return new UtterancCommentImpl();
}
}
2.前端资源管理
保留原JS插件体系的集成方式:
public class AssetManager {
// 将GmeekTocBot.js 等插件写入生成目录
public void copyPluginFiles(Path outputDir) {
Files.copy("src/main/resources/static/GmeekTOC.js",
outputDir.resolve("js/GmeekTOC.js"));
}
}
3.元数据处理器
public class MetadataExtractor {
// 实现类似plist.html 的标签处理逻辑[1]()
public List<String> extractLabels(JSONObject issueJson) {
return Arrays.stream(issueJson.getJSONArray("labels"))
.map(label -> label.getString("name"))
.collect(Collectors.toList());
}
}
三、技术选型建议
四、典型工作流程
1.Issue创建/更新事件触发
sequenceDiagram
Github Issues->>Java服务: Webhook通知
Java服务->>Github API: 获取Issue详情[2]()
Github API->>Java服务: 返回JSON数据
Java服务->>StaticGenerator: 生成HTML(集成footer.html[6]() )
StaticGenerator->>Github Pages: 提交到gh-pages分支
2.构建部署流程
# 通过Actions实现CI/CD[10]()
mvn clean package
&& java -jar blog-generator.jar
&& gh-pages -d target/generated-site
五、扩展性设计
1.插件机制
public interface BlogPlugin {
void apply(PostContent post, TemplateContext context);
}
// 实现类似GmeekVercount的访问统计[5]()
@Component
public class VisitCounterPlugin implements BlogPlugin {
public void apply(PostContent post, TemplateContext ctx) {
ctx.addScript("<script src='/js/GmeekVercount.js'></script>");
}
}
2.多仓库支持
通过@ConfigurationProperties实现多源配置:
@ConfigurationProperties(prefix = "github")
public class RepoConfig {
private Map<String, RepoProfile> repositories;
// 支持同时管理多个Github Pages站点
}
ps:看到Gmeek的第一眼我就忘本了,我也想做一个这玩意。