我正在参加「掘金·启航计划」
本指南将帮助您从源代码下载并构建 ThingsBoard。
环境要求
必装软件
Java 11
ubuntu 系统上
sudo apt update
sudo apt install openjdk-11-jdk
sudo update-alternatives --config java
手动安装
这里可选择任一厂商 JDK LTS 11,这里我选择的是 Eclipse Temurin JDK。
- Eclipse Temurin] adoptium.net/temurin/rel…
将包内容解压缩到一个目录中:
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
安装 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…