ThingsBoard 社区版源码构建指南

2,819 阅读4分钟

我正在参加「掘金·启航计划」

本指南将帮助您从源代码下载并构建 ThingsBoard。

环境要求

必装软件

Java 11

ubuntu 系统上
sudo apt update
sudo apt install openjdk-11-jdk

sudo update-alternatives --config java
手动安装

这里可选择任一厂商 JDK LTS 11,这里我选择的是 Eclipse Temurin JDK。

将包内容解压缩到一个目录中:

tar -xzvf <jdk_package>.tar.gz

验证是否正确提取了包,请运行 java 命令:

<jdk_package>/bin/java -version

安装后配置环境变量。

Maven 3.1.0+

ubuntu 系统下
sudo apt-get install maven
手动安装 Maven

maven.apache.org/download.cg… 下载 maven,安装后配置环境变量并重启 cmd 验证命令是否生效。

建议设置 Maven 镜像,加快后续编译速度。

<mirror>
    <id>my-central</id>
    <mirrorOf>central</mirrorOf>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

如果是需要在 Windows 系统中进行编译,且存在系统盘存储空间吃紧的情况下可更改本地仓库地址为

<localRepository>D:\mvnRepository</localRepository>

可选软件

注意:标注为可选,是为了方便前端自行调试。

git

git-scm.com/

安装 node 以及 yarn

到 node 官网 nodejs.cn/download/ 下载,安装后不用配置环境变量,cmd 验证命令是否生效。

安装 yarn 则可以使用 npm 命令。

源码下载

您可以从官方 github repo 克隆项目的源代码。

git clone git@github.com:thingsboard/thingsboard.git
# checkout latest release branch
git checkout release-3.4

如果是自建仓库则修改上述语句, clone 对应分支即可。

git clone http://192.168.3.175:9494/Fox_AIoT/Fox_ThingsBoard_Dev.git

构建

构建步骤

下载源码并编译

mvn clean install -DskipTests

注释:构建打包可开启跳过测试的选项,加快编译速度。

执行完 install 后,若报告中看到 BUILD SUCCESS 话术则说说明构建成功。并且能在 application/target 中找到构建产物则说明构建成功。

-rwxr-xr-x 1 zhangsan 197121 180241757 Mar 23 10:44 thingsboard-3.3.4.1-boot.jar
-rw-r--r-- 1 zhangsan 197121   1611307 Mar 23 10:44 thingsboard-3.3.4.1.jar
-rw-r--r-- 1 zhangsan 197121 166603843 Mar 23 10:44 thingsboard-windows.zip
-rw-r--r-- 1 zhangsan 197121 166401722 Mar 23 10:44 thingsboard.deb
-rw-r--r-- 1 zhangsan 197121 166423638 Mar 23 10:44 thingsboard.rpm

注意:如果遇到问题,在尝试解决问题后可使用 mvn -rf 命令恢复构建,例如从 ui-ngx 恢复构建。mvn install '-DskipTests' -e -rf :ui-ngx

构建提速技巧

注释 license-maven-plugin

为提升编译速度,可将根目录 pom.xml, 搜索并注释掉 license-maven-plugin。

统一 yarn 和 node 的版本

若发现 msa/web-ui 、msa/js-executor 和 ui-ngx 的 yarn 和 node 三个模块的版本不统一,则可以统一为最高版本。这样只需下载一次 yarn 和 node 即可。

并发构建,format headers, build docker images

在构建时加入参数 -T 0.8C

mvn -T 0.8C license:format clean install -DskipTests -Ddockerfile.skip=false

遇到过的问题

1. mvn clean package -DskipTests 提示 -DskipTests 不识别

请确认是否是 windows 系统且启用了 powershell,此时需要将命令改为 mvn clean install '-DskipTests'。或者将终端切换为 cmd 。

2. ui-ngx 构建报错

请根据自己的终端报错提示进行排查。其中一类问题是出在了 com.github.eirslett:frontend-maven-plugin 插件下载 node 和 yarn 失败。于是查看 ui-ngx 模块下 pom.xml 文件为:

<configuration>
    <nodeVersion>v16.13.0</nodeVersion>
    <yarnVersion>v1.22.17</yarnVersion>
</configuration>

因此可手动下载正常下载不下来的 node 和 yarn 安装包。

node 安装包到 C:\Users\zhangsan.m2\repository\com\github\eirslett\node yarn 压缩包到 C:\Users\zhangsan.m2\repository\com\github\eirslett\yarn

之后可重新从 ui-ngx 恢复构建。mvn install '-DskipTests' -e -rf :ui-ngx

3. js-executor 运行报错

问题分析:

 Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:yarn (yarn pkg) on project js-executor: Failed to run task: 'yarn run pkg' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 2 (Exit value: 2) -> [Help 1]

根据提供的终端报错日志,查明为 yarn run pkg 报错

D:\zhangsan\Projects_Idea\thingsboard-release-3.3\msa\js-executor>yarn run pkg
yarn run v1.22.18
$ pkg -t node12-linux-x64,node12-win-x64 --out-path ./target . && node install.js
> pkg@5.3.1
> Fetching base Node.js binaries to PKG_CACHE_PATH
  fetched-v12.22.2-linux-x64          [                    ] 0%> Not found in remote cache:
  {"tag":"v3.2","name":"node-v12.22.2-linux-x64"}
> Building base binary from source:
  built-v12.22.2-linux-x64
> Error! Not able to build for 'linux' here, only for 'win'
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

原因分析:本地缓存缺少 pkg-fetch 包

解决方法:前往 github 下载对应文件

下载链接: github.com/vercel/pkg-… github.com/vercel/pkg-…

重命名并放到对应目录 C:\Users\zhangsan\.pkg-cache\v3.2

fetched-v12.22.2-linux-x64
fetched-v12.22.2-win-x64

4. 使用高版本 nodejs 导致的构建错误

问题描述: 使用高版本 nodejs ,比如:node-v14.15.4-x64.msi。 Validating package.json...error thingsboard-js-executor@3.3.1: The engine。"node" is incompatible with this module. Expected version ">=12.0.0 <14.0.0". Got "14.15.4"。

解决办法:降低 nodejs 版本。

5. 使用 老旧 jdk 导致的构建错误

问题描述:有些 jdk11 比较旧,建议用安装包里程序,已经测试没问题。以下就是用 JDK11 旧版本出现 编译错误 rest-client。

解决办法:更新 jdk 版本。

参考网址

Building from sources | ThingsBoard Community Edition thingsboard.io/docs/user-g…