thingsboad踩坑记 -- 源码编译
由于中所周知的原因,国内访问gitlab和maven中央仓库都会出现问题;thingsboard源码涉及maven,gradle和前端等编译问题,本文将从零开始全套构建本地开发环境
本次环境搭建采用 thingsboard 3.4.1 源码,此版本基本要求
jdk 11 (必须是jdk11)
postgresql 9.6+ (本次使用使用pgsql13,安装方法自行参考官方介绍搭建)
ideaCE(社区版) 2022.2,有条件可直接使用 旗舰收费版
maven 3.6.x
nodejs 16.x
工具配置
- maven配置
无论国内任何maven镜像,都建议您直接代理 * ; 但是直接代理全部内容thingsboard编译一定会出错,常见问题 gradle 找不到异常;先看常见配置
1 | <!-- 在maven中settings.xml 文件中的mirrors节点添加阿里云maven代理 --> |
直接编译(maven安装,请自行搜索解决)
1 | mvn clean compile package -DskipTests=true |
编译结果如下:
显然,阿里代理maven直接配置,是不能编译通过的。再看阿里maven代理
public代理仅仅代理maven的central和jcenter,并没有直接代理gradle的仓库,配置镜像是如果 直接 代理 * 都指向阿里public代理,自然是找不到 gradle相关依赖;我们需要手动配置maven代理,使其只代理central和jcenter,其余仓库应当自行查找对应的仓库地址;在配置maven前请在环境变量中设置 gradle user home;不然gradle都是默认指向c盘。参考 GRADLE_USER_HOME = D:/gradle
修改settings.xml文件
1 | <!-- 配置第一个 maven mirror,maven代理仓是从第一个开始查找 --> |
配置到这里,编译java的编译基本都能通过,但是后续会出现前端代码编译出错
前端依赖配置
我们找到指定的目录直接npm install 尝试,但是会出现 git拉取代码错误,原因就在于访问github超时,打开ui-ngx 目录,查看package.json,发现有三个依赖是采用git拉取代码的方式导入依赖包
显然不能够直接采用这种方式,我们将对应的git仓的代码直接下载,解压放到 ui-ngx/libs目录中,直接改成本地文件依赖导入
然后更改相关配置, 将原有带有git的依赖改成以下内容,注意需要将下载下来的源码目录命名到对应的目录
1 | { |
最终编译成功
如果出现ui-ngx由于依赖下载超时导致的问题,请参考配置npm代理镜像
- npm配置
nodejs请自行下载安装
1 | npm set registry http://registry.npmmirror.com |
本地调试配置
- idea配置
编译完成后,使用idea打开一定会出现诸多错误,首先 是 *gen.xx 找不到错误
显然这不正确,都编译打包通过了,怎么会出现依赖找不到问题了。仔细观察,这些错误都是grpc编译后的文件依赖缺失,我们需要找到对应的文件,或者手动生成对应的文件;注意不要直接根据proto文件生成对应的代码文件,否则会出现重复文件导致编译不通过。
我们找到对用的grpc编译插件,所有的proto文件都生成了对应的源码文件,但是都在target/generated-source/中,我们需要手动将每一个生成的带添加到source中
所有的protobuf生成代码的目录添加到source中后,重新在idea build,所有错都消失,如果还出现红色错误,试着重启一下idea,后添加的source中的文件并没有建立索引,所以找不到相关依赖,也是正常的,重启后,重新建立index,错误自然也就消失了。
本地调试
在启动本地调试前需要,修改一下,thingsboard中相关配置并且创建数据库和相关表
找到application 模块中的thingsboard.yml 将对应的数据库连接改成你调试所用的数据库
在postgres创建数据库,注意不要直接使用工具创建,pgsql数据库中的数据集有些特殊,请采用以下语句手动创建
1 | create database thingsboard template='template0' lc_collate='C' lc_ctype = 'C' encoding = 'UTF-8'; |
除以上注意问题,请直接找到 dao模块中的sql,执行全部的文件,创建数据
- 启动本地调试
运行 application中的server
thingsboard默认的三个账户
- System Administrator: sysadmin@thingsboard.org / sysadmin
- Tenant Administrator: tenant@thingsboard.org / tenant
- Customer User: customer@thingsboard.org / customer