# 起步

在程序启动之前,需要先准备一下环境。

Gable 对所运行的机器没有太多要求,只需要安装一个 JDK8 的环境即可。

如果您下载 JDK 有困难,可以在这里找到CDN版本: https://www.injdk.cn/ (opens new window)

# 运行代码

可以直接从 Github 克隆代码,控制台执行命令:


# https 链接
git clone https://github.com/AdvancedProductivity/Gable.git

# ssh 链接
git clone git@github.com:AdvancedProductivity/Gable.git

# 代码仓库目录结构

├── assets (Github readme.md 中引用的资源)
├── document (基于VuePress的项目文档) 
├── server (基于 SpringBoot 的后台服务,提供协同服务和api执行代理服务)
├── client (前端客户端的代码,包含Electron客户端和Web端两套)
│   ├── app (Electron后端的程序代码)
│   ├── e2e (e2e测试,当前并没有充实e2e测试用例,手动保证测试)
│   ├── src (web端的代码实现,Electron也会加载这里的代码)
│   │   └──  app (前端组件都在这里实现的)
│   │   └── assets (资源文件)
│   │   └── environments (环境配置)
│   └── package.json
│ 
└── README.md

# 启动项目

Gable本身是一个普通的 Angular 项目,只需要下载依赖然后启动就好了,但是因为使用 Angular-Electron (opens new window) 的模板,这个模板在下载依赖库时会向Github下载Electron相关依赖, 这个下载比较要求用户的网络环境,如果出现了下载失败的情况,多下载几次就好了。

cd client

npm i

npm run start

成功启动之后,它会启动浏览器并打开 http://localhost:4200 (opens new window),同时启动Electron的客户端,在开发模式下,Electron端通过WebView加载的 http://localhost:4200

# 启动后台服务

Gable 是为用户提供协作服务的,处于用户体验的角度考虑,用户可以不连接Gable后台服务当做单机版本用。

但是当遇到协作的场景时,只需要在 设置中连接 Gable 的后台即可轻松开启协作。

Gable 的后台代码是写在 server 目录下的,它目前而言还仅仅是一个非常简单非常普通的 SpringBoot 的项目。

如果你有 java 的开发经验,应该非常简单就能启动该服务。

该服务会默认占用机器的 2208 端口,2208是指的2022年8月,是 Gable 项目启动的月份。

# 数据库

Gable 在最初的设计是使用的 Postgresql 来存储数据,但是很快我们就遇到了两个问题:

  • 用户可能没有 Postgresql 实例,想使用 Gable 还得现安装,给人体验不好
  • 如果要使用 Github Actions 做单元测试,还需要拉取一个带有 Postgresql 的镜像。

基于以上两点考虑,我们使用 flyway,使得 Gable 可以集成两套数据库:H2Postgresql

为什么选择 H2 数据库呢,因为它可以在程序启动时,自动创建数据库文件,不需要单独安装一个数据库进程。

这样用户就可以一个 java -jar server.jar 的命令,直接启动后台服务,这是基于提升用户体验的决策。

Gable 默认是基于当下比较火爆的 Postgresql 开发,所以在运行程序之前,需要先准备一下数据库相关的环境。

# 对于 H2

程序启动时,会在用户目录下的 .gable 文件夹里生成一个 gable-server.db 的文件,属于全部都存放在这里。

# 对于 Postgresql

用户可能需要先初始化一个数据库。

执行以下 sql:

-- 创建数据库 名为 gable
create database gable with owner postgres;

-- 创建连接数据库的账号 app 密码 123456 (和代码中的配置对应)
create user app with password '12345678';

-- 分配访问权限
grant connect, create, temporary on database gable to app;

至于其它的数据库表以及索引等,会在程序启动时自动创建。

# 关于测试

如果你需要运行单元测试的代码,需要额外创建一个数据库 gable_test 来初始化单元测试的数据。

# 初始化测试数据库

执行以下 sql:

-- 创建数据库 名为 gable_test
create database gable_test with owner postgres;

-- 分配访问权限
grant connect, create, temporary on database gable_test to app;

正式环境中,Gable 使用 Flyway 管理不同版本之间的数据库迁移,而测试环境中禁用了 Flyway,启用了spring.sql.init.mode=always

在测试目录下的 data.sqlschema.sql 定义了测试数据库中所需要的数据。 每次启动都会初始化数据库,如果后续因为测试的需要,只需要更改 data.sqlschema.sql 的数据即可。

# 测试

在项目刚开始的阶段,还写过几个测试用例,甚至还做过测试覆盖率。

但是进入高强度迭代之后,测试用例实在拖慢了进度,故而没有推进,后续会不断完善测试用例。

# 命令执行测试

普通测试

mvn test

覆盖率测试

mvn test jacoco:repor

该测试会生成代码覆盖率以及分支的检测,报告位置见: target/site/jacoco/index.html

关于测试,这里有其它帮助文档:

Last Updated: 2022/9/1 下午7:23:02