Windows 源码运行 ThingsBoard
首先理一下ThingsBoard所需的环境:
1.jdk1.8
2.maven
3.PostgreSQL
4.nodejs && npm
5.redis
6.git
7.IDEA(源码运行)
以下运行的是2.4版本的
错误查找建议方法:浏览器 --> ctrl+F 输入错误包:如
org.apache.maven.plugins:maven-clean-plugin:2.5:clean
参考:
https://www.iotschool.com/wiki/tbinstall
http://www.ithingsboard.com/docs/user-guide/install/windows/
http://www.ithingsboard.com/docs/user-guide/contribution/yuanmayunxing/
https://blog.csdn.net/nihaomabmt/article/details/107385241
部分问题按照解决操作完成后需要重启IDEA/shell窗口,请多试几次。文中问题笔者也没有全部遇到,更多的问题请到
https://www.iotschool.com/topics/node8
搜索解决,生命在于折腾,多折腾几次,笔者最终效果:
登录:
以下开始正文:
JDK
下载安装
JDK 官方下载地址: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
JDK 版本选择 JDK8,我本地环境是 Windos10 64 位,所以选择 jdk-8u221-windows-x64.exe
下载好了之后直接默认安装就行
配置环境变量
步骤 1: 在 JAVA_HOME 中增加 JDK 的安装地址:C:\Program Files\Java\jdk1.8.0_221
步骤 2: 在 CLASSPATH 中增加 JDK 的安装地址中的文件:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
步骤 3: 在 Path 中增加 JDK 的地址:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
步骤 4 输入以下命令
java -version
如果能出现以下的提示信息,就算安装成功了
安装 IDEA
参考:IDEA 安装教程
安装 Maven
步骤 1:下载 maven,进入地址:http://maven.apache.org/download.cgi
步骤 2:下载到本地
步骤 3:配置环境变量 增加 MAVEN_HOME,即 maven 的地址:D:\tb\apache-maven-3.6.1-bin,请注意,如果直接解压,有可能会有两个 apache-maven-3.6.1-bin
MAVEN_OPTS,参数是 -Xms128m -Xmx1024m
修改 Path,增加 Maven 的地址%MAVEN_HOME%\bin;
测试 Maven 安装,打开命令行工具。使用命令 mvn -v,如果能出现以下提示,即安装成功
PostgreSQL
我是直接装在docker上的,比较简单粗暴。
docker pull postgres:9.4
创建容器:
docker run --name postgres1 -e POSTGRES_PASSWORD=password -p 54321:5432 -d postgres:9.4
其他安装请移步:https://www.runoob.com/postgresql/windows-install-postgresql.html
Nodejs 安装
步骤 1:下载 Nodejs 安装包,Nodejs 官网地址:https://nodejs.org/en/download/
步骤 2:安装完成后,使用命令查看 Nodejs 是否已经安装完成,能出现以下提示说明已经安装成功
安装 redis
Redis 安装参考:https://www.iotschool.com/wiki/redis
安装 git
步骤 1:下载 git 安装包,git 官网地址是:https://git-scm.com/download/win
步骤 2:安装完成后,使用命令行测试 git
安装 npm 全局依赖
步骤 1:使用管理员 CMD 命令行,执行下面命令
#npm 环境读取环境变量包
npm install -g cross-env#webpack打包工具
npm install -g webpack
克隆 thingsboard 代码
git clone https://github.com/thingsboard/thingsboard.git
耐心等待一段时间后,看到以下界面就算下载成功
切换 git 分支
默认下载的代码是 master 主分支的。
查看项目源码的所有分支,下载源码后,需要进入到 thingsboard 文件夹
最新版本是2.5的,但是本次先安装2.4的
git checkout release-2.4
看到下图这样,即切换成成功
准备工作
外网连接
因为 TB 在编译过程中需要依赖很多国外的包,那么需要外网才能连接,有连接外网支持,可以到社区求助:https://www.iotschool.com/topics/node8
设置 Maven 为淘宝镜像
工程是基于 Maven 管理,直接通过 idea open,之后会自动下载各种依赖包。依赖包的默认存储地址为:C:\Users\用户名.m2\repository,内容如下:
$tree ~/.m2 -L 2
/home/jay/.m2
└── repository├── antlr├── aopalliance├── asm├── backport-util-concurrent├── ch...
一般情况下,使用官方镜像更新依赖包,网速不稳定,可将 Maven 镜像源设置为淘宝的,在 maven 安装包目录下找到 settings.xml 设置
大概位置截图:
把 settings.xml 里面内容设置成以下:
<mirrors><mirror><!--This sends everything else to /public --><id>aliyun_nexus</id><mirrorOf>*,!maven_nexus_201</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url></mirror>
</mirrors>
不会设置的,可以参考这个文件:https://cdn.iotschool.com/iotschool/settings.xml
thingsboard QQ 群也有这个资源:121202538
设置 npm 为淘宝镜像
同上,网速不好 npm 过程中也会下载失败,这是导致很多同学 thingsboard 编译失败的主要原因,所以我们在进行编译之前,也将 npm 替换为淘宝镜像:
npm install -g mirror-config-china --registry=http://registry.npm.taobao.org #使用淘宝镜像
npm config get registry #查询当前镜像
npm config rm registry #删除自定义镜像,使用官方镜像
npm info express
执行 npm install -g mirror-config-china --registry=http://registry.npm.taobao.org 即可
设置 IDEA 管理员启动
我本地开发环境编译项目使用 IDEA 工具进行编译,所以需要设置管理员启动,这样才有所有的权限执行编译命令。 步骤 1:点击 IDEA 图标右键,选择属性。
步骤 2:点击兼容性 - 更改所有用户设置 - 以管理员身份运行此程序
开始编译
编译项目跟网速有关,最好连接上外网进行编译,一般 5~30 分钟都有可能,超过 30 分钟要检查你的网络。
编译之前先去掉license检查:
(1)注释 thingsboard/pom.xml文件中有关liscense的配置信息,直接搜索"com.mycila"就可以找到下面的内容,大约在thingsboard/pom.xml文件的694行左右,修改如下:
<!--注释配置项--><!-- <plugin><groupId>com.mycila</groupId><artifactId>license-maven-plugin</artifactId><version>3.0</version><configuration><header>${main.dir}/license-header-template.txt</header><properties><owner>The Thingsboard Authors</owner></properties><excludes><exclude>**/.env</exclude><exclude>**/*.env</exclude><exclude>**/.eslintrc</exclude><exclude>**/.babelrc</exclude><exclude>**/.jshintrc</exclude><exclude>**/.gradle/**</exclude><exclude>**/nightwatch</exclude><exclude>**/README</exclude><exclude>**/LICENSE</exclude><exclude>**/banner.txt</exclude><exclude>node_modules/**</exclude><exclude>**/*.properties</exclude><exclude>src/test/resources/**</exclude><exclude>src/vendor/**</exclude><exclude>src/font/**</exclude><exclude>src/sh/**</exclude><exclude>packaging/*/scripts/control/**</exclude><exclude>packaging/*/scripts/windows/**</exclude><exclude>packaging/*/scripts/init/**</exclude><exclude>**/*.log</exclude><exclude>**/*.current</exclude><exclude>.instance_id</exclude><exclude>src/main/scripts/control/**</exclude><exclude>src/main/scripts/windows/**</exclude><exclude>src/main/resources/public/static/rulenode/**</exclude><exclude>**/*.proto.js</exclude><exclude>docker/haproxy/**</exclude><exclude>docker/tb-node/**</exclude><exclude>ui/**</exclude><exclude>src/browserslist</exclude><exclude>**/*.raw</exclude></excludes><mapping><proto>JAVADOC_STYLE</proto><cql>DOUBLEDASHES_STYLE</cql><scss>JAVADOC_STYLE</scss><jsx>SLASHSTAR_STYLE</jsx><tsx>SLASHSTAR_STYLE</tsx><conf>SCRIPT_STYLE</conf><gradle>JAVADOC_STYLE</gradle></mapping></configuration><executions><execution><goals><goal>check</goal></goals></execution></executions></plugin>-->
.....
<!--紧跟着上面的这个就是这个隐藏信息-->
<!-- <plugins><plugin><groupId>com.mycila</groupId><artifactId>license-maven-plugin</artifactId></plugin></plugins>-->
(2)配置application\target\generated-sources\protobuf代码自动生成 ,还是在 thingsboard/pom.xml这个文件中搜索即可 ,大约在653行左右
<configuration><sources><source>${basedir}/target/generated-sources</source><!--配置application\target\generated-sources\protobuf代码自动生成--><!-- source>${basedir}/target/generated-sources</source --><source>${basedir}/target/generated-sources/grpc-java</source><source>${basedir}/target/generated-sources/java</source></sources></configuration>
(3) 注意经过将数据库安装好了之后,创建好thingsboard数据库的所有表之后,还要将项目中的内容配置进行修改下,在application/src/main/resources/thingsboard.yml这个文件里,找到下面的内容,将默认的数据库名postgres改为thingsboard。
datasource:driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"username: "${SPRING_DATASOURCE_USERNAME:postgres}"password: "${SPRING_DATASOURCE_PASSWORD:*****}"<!--数据库的设置的密码,在项目中是明文-->hikari:maximumPoolSize: "${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:5}"
清理项目编译文件
使用 IDEA Maven 工具进行清理
输入编译命令开始编译
在 IDEA 控制台(左下方)Terminal 输入以下命令进行编译:
mvn clean install -DskipTests
等一段时间后,看到下面这张图就算编译成功,如果没有编译成功请按照本教程最后的常见问题进行排查,一般都是网络问题。如果还有问题,请到社区thingsboard 专题中提问。
缓存导致编译失败
每次编译失败进行二次编译时,要清理缓存,并杀死遗留进程 步骤 1:执行下面命令,杀死遗留进程
taskkill /f /im java.exe
步骤 2:使用 IDEA Maven 工具进行清理
温馨提示:要进行二次编译前,最好重启一次电脑!
Server UI 编译失败
[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.0:npm (npm install) on project ui: Failed to run task: 'npm install' failed. (error code 1) -> [Help 1]
如果遇到这个问题,可从以下几个原因进行分析:
原因 1:node、npm 版本号问题
本地环境安装的 node、npm 版本号与源码中 pom.xml 文件配置的版本号不一致。
解决方案: 步骤 1:使用 node -v、npm -v 查看安装的 node 和 npm 版本号
步骤 2:修改源码中 pom.xml 文件中的版本号
<configuration><nodeVersion>v12.13.1</nodeVersion><npmVersion>6.12.1</npmVersion>
</configuration>
需要修改的文件有三处,位置如下:
原因 2:node-sass 下载失败
编译 Server UI 时,会下载 node-sass 依赖,如果因为网络原因没有下载成功,也会编译失败。如果你是按照本本教材一步一步来的,应该不会有问题,上面准备工作中,将 npm 镜像源切换为淘宝,那么下载会很快的。
[INFO] Downloading binary from https://github.com/sass/node-sass/releases/download/v4.12.0/win32-x64-72_binding.node
[ERROR] Cannot download "https://github.com/sass/node-sass/releases/download/v4.12.0/win32-x64-72_binding.node":
[ERROR]
[ERROR] ESOCKETTIMEDOUT
[ERROR]
[ERROR] Hint: If github.com is not accessible in your location
[ERROR] try setting a proxy via HTTP_PROXY, e.g.
[ERROR]
[ERROR] export HTTP_PROXY=http://example.com:1234
[ERROR]
[ERROR] or configure npm proxy via
[ERROR]
[ERROR] npm config set proxy http://example.com:8080
[INFO]
[INFO] > node-sass@4.12.0 postinstall F:\workspace\thingsboard\thingsboard\ui\node_modules\node-sass
[INFO] > node scripts/build.js
[INFO]
解决方案:切换镜像源为淘宝
解决方案:重启电脑,清理缓存
原因 3:Thingsboard 3.0 版本编译遇到的问题
亲测:2.4 版本也可以通过这种方式来解决
Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.7.5:npm (npm install) on project ui-ngx: Failed to run task: 'npm install' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: -4048 (Exit value: -4048) -> [Help 1]
解决方案:https://www.iotschool.com/topics/84
原因 4:二次编译导致残留进程
报错:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project ui: Failed to clean project: Failed to delete F:\workspace\thingsboard\thingsboard\ui\target\node\node.exe -> [Help 1]
Server Tool 编译失败
[ERROR] Failed to execute goal on project tools: Could not resolve dependencies for project org.thingsboard:tools:jar:2.4.3: Failed to collect dependencies at org.eclipse.paho:org.eclipse.paho.client.mqttv3:jar:1.1.0: Failed to read artifact descriptor for org.eclipse.paho:org.eclipse.paho.clien
t.mqttv3:jar:1.1.0: Could not transfer artifact org.eclipse.paho:org.eclipse.paho.client.mqttv3:pom:1.1.0 from/to aliyun_nexus (http://maven.aliyun.com/nexus/content/groups/public/): Failed to transfer file http://maven.aliyun.com/nexus/content/groups/public/org/eclipse/paho/org.eclipse.paho.cli
ent.mqttv3/1.1.0/org.eclipse.paho.client.mqttv3-1.1.0.pom with status code 502 -> [Help 1]
一般由于网络原因,IoTSchool 小编至少编译了 3 次才成功,每次编译都重启电脑,并清理环境。
解决方案:如果使用的是 mvn clean install -DskipTests 命令进行编译,那么就多尝试几次,每次编译前,要清理环境。
参考:https://github.com/thingsboard/performance-tests/issues/10
JavaScript Executor 编译失败
JavaScript Executor Microservice 编译失败
[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.0:npm (npm install) on project js-executor: Failed to run task: 'npm install' failed. (error code 2) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :js-executor
原因:本地缓存缺少 fetched-v10.15.3-linux-x64 和 fetched-v10.15.3-win-x64 这两个文件。
解决方案: 步骤 1:下载这两个文件到本地,下载后记得重命名,下载地址:https://github.com/zeit/pkg-fetch/releases
步骤 2: 将下载的两个文件放到:放到:C:\Users\你的用户名 \ .pkg-cache\v2.6。并将名字分别修改为:fetched-v10.15.3-linux-x64 和 fetched-v10.15.3-win-x64
windows 创建 .pkg-cache 使用cmd
mkdir .pkg-cache
参考:https://github.com/thingsboard/thingsboard/issues/2084
较新的版本用的是10.17,干脆两个都下了
笔者执行这些操作仍然有问题,又进行了以下操作(我是UI模块报的错):
进入\thingsboard\ui 删除:
执行:
npm cache clean --force
--force 是5.0之后包管理方式变了之后需要加。
然后在当前目录执行:
等待。。。。
然后在IDEA里执行mvn install
运行ThingsBoard服务main方法
报错:Failed to date mail configuration. Settings not found
原因:没有导入测试数据:
mac/linux进入:\thingsboard\application\target\bin\install
windows进入:\thingsboard\application\target\windows
执行:install_dev_db.sh/bat
最后浏览器输入:http://localhost:8080进行访问
License 检查不通过
[ERROR] Failed to execute goal com.mycila:license-maven-plugin:3.0:check (default) on project thingsboard: Some files do not have the expected license header -> [Help 1]
解决方案:在根目录 pom.xml 中屏蔽 license-maven-plugin
搜索 license-maven-plugin,将整个 plugin 都注释掉
Web UI 编译失败
Web UI 编译失败请参考Server UI 编译失败第一个原因
maven:Could not resolve dependencies for project org.thingsboard:application:
错误信息
[ERROR] Failed to execute goal on project application: Could not resolve dependencies for project org.thingsboard:application:jar:2.4.1: The following artifacts could not be resolved: org.thingsboard.rule-engine:rule-engine-components:jar:2.4.1, org.thingsboard:dao:jar:2.4.1: Could not find artifact org.thingsboard.rule-engine:rule-engine-components:jar:2.4.1 in jenkins (http://repo.jenkins-ci.org/releases) -> [Help 1]
解决方案:根目录下去 maven 编译,不要在每个单独编译,否则不能自动解决依赖,如果你已经在子模块进行了编译,请回到根目录先 clean 一下,再重新编译。
maven:Failed to delete tb-http-transport.rpm
错误信息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project http: Failed to clean project: Failed to delete D:\my_project\thingsboard\transport\http\target\tb-http-transport.rpm -> [Help 1]
解决方案:第一次编译失败,再次编译可能会提示该错误,可以手动到报错路径删除,如果提示文件正在使用,需要在任务管理器杀死 java 进程后再手动删除。
npm:npm:cb() never called!
错误信息:
npm ERR! cb() never called!npm ERR! This is an error with npm itself. Please report this error at:
npm ERR! <https://npm.community>npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\yuren\AppData\Roaming\npm-cache\_logs\2019-11-06T10_55_28_258Z-debug.log
解决方案: 尝试 npm cache clean --force 后再次 npm install 无果; 尝试更换淘宝镜像源后再次 npm install 无果; 怀疑有些包下载需要翻墙,全局代理翻墙后问题依然存在; 参考网上关闭所有代理后问题依然存在; 通过 log 日志分析最后一个解包报错的地方,屏蔽需要的 material-design-icons,新 modules rxjs 仍然报错;
extract material-design-icons@3.0.1 extracted to node_modules\.staging\material-design-icons-61b4d55e (72881ms)
extract rxjs@6.5.2 extracted to node_modules\.staging\rxjs-e901ba4c (24280ms)
参考 npm ERR cb() never called 执行
npm install --no-package-lock
之后提示 npm ERR! path git,添加 git 到环境变量后正常。
npm:npm ERR! path git
错误信息
npm ERR! path git
npm ERR! code ENOENT
npm ERR! errno ENOENT
npm ERR! syscall spawn git
npm ERR! enoent Error while executing:
npm ERR! enoent undefined ls-remote -h -t git://github.com/fabiobiondi/angular-
解决方案:添加 git 到环境变量。
No compiler is provided in this environment
错误信息:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.
1:compile (default-compile) on project netty-mqtt: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on
a JRE rather than a JDK?
需要在环境变量中设置 java,包含%JAVA_HOME%bin;%JAVA_HOME%lib;
Windows 源码运行 ThingsBoard相关推荐
- 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存
文章目录 一.JDK 体系结构 二.Java 源码运行原理 三.Java 虚拟机内存结构 一.JDK 体系结构 JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java Lan ...
- Windows 源码编译 nginx (加入nginx-http-flv-module)
文章目录 windows 源码编译 nginx,可以加入功能模块 1. 依赖 2. 步骤 2.1 下载源码 2.2 解压依赖 2.3 配置环境变量 2.4 配置和编译 3. 测试 4. 参考 wind ...
- Boundary Sensitive Network (BSN) 源码运行
Boundary Sensitive Network (BSN) 源码运行 BSN论文:https://arxiv.org/abs/1806.02964 BSN源码:https://github.co ...
- win10下从源码运行Cura——环境配置(二次开发准备工作)
win10下从源码运行Cura(二次开发准备工作) win10下从源码运行Cura 配置过程(踩坑指南) win10下从源码运行Cura 本人小白一只,近来需要了解Cura,故自己摸爬滚打学习.网上对 ...
- ST-GCN源码运行完整版(含OpenPose编译安装)及常见问题
ST-GCN源码运行完整版(含OpenPose编译安装) -------本文仅为学习笔记,不做任何商业用途------- 下述相关工具包下载链接ST-GCN所需工具,提取码ze36 一.准备工作 1. ...
- airflow 源码调试之源码运行(一)
airflow 源码调试之源码运行(一) 开发环境 windows上的ubuntu16.0虚拟机 Python3.8 调试准备 Pycharm 配置远程连接主机 配置使用远程主机Python解释器 没 ...
- 博客园HTML源码运行特制js(原创自Zjmainstay)
canrun 测试运行HTML <html> <head><title>测试博客园HTML源码运行程序</title><meta http-equ ...
- 《Android Studio开发实战 从零基础到App上线》源码运行问题解答
本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...
- 【TensorFlow】人脸识别OpenFace、Face-recognition、Insightface和FaceNet源码运行
比较人脸识别OpenFace.Face-recognition.Insightface: FaceNet源码运行 https://github.com/davidsandberg/facenet 1. ...
最新文章
- 解决前端页面闪烁问题(转载)
- 正确的 Git 提交记录和分支模型
- 在URL上设置时间戳
- java properties 属性,java 读取 properties 属性资料
- Component Configuration.js - 所有支持属性列表 - configuration priority
- [蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)
- react学习(22)---需要export
- Cannot read property ‘forceUpdate‘ of undefined
- 物联网linux_Linux的未来,Google的物联网标准等
- Q125:PBRT-V3,对比VolPathIntegrator::Li()和EstimateDirect()判断Medium的方式
- 解读I2C协议和读写流程
- wex5 java_[Java教程]WEX5中ajax跨域访问的几种方式
- MATLAB R2013 a版及序列号
- 百度云 java私塾_JAVA私塾-百度云
- 惠普局域网共享打印机设置_打印机usb转网络?打印机共享怎么设置?怎样设置hp打印机共享器操作方法...
- 大话2正在连接登录服务器,大话西游手游服务器连接失败进不去解决办法
- 2020年中国半导体划片机行业现状分析,国产替代+需求扩张,行业前景广阔「图」
- slideup_jQuery slideUp,slideDown,slideToggle
- 分布式系统常见问题总结
- 立法保护关键信息基础设施意义重大
热门文章
- Esp8266天猫精灵_RGB灯_非点灯平台
- 全球变暖,为何寒潮这么多?【北极变暖:冷空气有了出口】
- 自然图像抠图/视频抠像技术发展情况梳理(image matting, alpha matting, video matting)--计算机视觉专题1
- 金融申请评分卡(2)
- android生命周期home键,Android横竖屏切换, 手机锁屏以及按Home键和返回键时的Activity的生命周期...
- [图文详解]什么是一致性哈希算法,墙裂推荐收藏
- 建立适当的索引(ZZ)
- Python多线程爬虫之二:爬取王者荣耀高清壁纸(多线程)
- Android 大图查看器
- openfire html5,HTML5来了,7个混合式移动开发框架