首先理一下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相关推荐

  1. 【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

    文章目录 一.JDK 体系结构 二.Java 源码运行原理 三.Java 虚拟机内存结构 一.JDK 体系结构 JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java Lan ...

  2. Windows 源码编译 nginx (加入nginx-http-flv-module)

    文章目录 windows 源码编译 nginx,可以加入功能模块 1. 依赖 2. 步骤 2.1 下载源码 2.2 解压依赖 2.3 配置环境变量 2.4 配置和编译 3. 测试 4. 参考 wind ...

  3. Boundary Sensitive Network (BSN) 源码运行

    Boundary Sensitive Network (BSN) 源码运行 BSN论文:https://arxiv.org/abs/1806.02964 BSN源码:https://github.co ...

  4. win10下从源码运行Cura——环境配置(二次开发准备工作)

    win10下从源码运行Cura(二次开发准备工作) win10下从源码运行Cura 配置过程(踩坑指南) win10下从源码运行Cura 本人小白一只,近来需要了解Cura,故自己摸爬滚打学习.网上对 ...

  5. ST-GCN源码运行完整版(含OpenPose编译安装)及常见问题

    ST-GCN源码运行完整版(含OpenPose编译安装) -------本文仅为学习笔记,不做任何商业用途------- 下述相关工具包下载链接ST-GCN所需工具,提取码ze36 一.准备工作 1. ...

  6. airflow 源码调试之源码运行(一)

    airflow 源码调试之源码运行(一) 开发环境 windows上的ubuntu16.0虚拟机 Python3.8 调试准备 Pycharm 配置远程连接主机 配置使用远程主机Python解释器 没 ...

  7. 博客园HTML源码运行特制js(原创自Zjmainstay)

    canrun 测试运行HTML <html> <head><title>测试博客园HTML源码运行程序</title><meta http-equ ...

  8. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  9. 【TensorFlow】人脸识别OpenFace、Face-recognition、Insightface和FaceNet源码运行

    比较人脸识别OpenFace.Face-recognition.Insightface: FaceNet源码运行 https://github.com/davidsandberg/facenet 1. ...

最新文章

  1. 解决前端页面闪烁问题(转载)
  2. 正确的 Git 提交记录和分支模型
  3. 在URL上设置时间戳
  4. java properties 属性,java 读取 properties 属性资料
  5. Component Configuration.js - 所有支持属性列表 - configuration priority
  6. [蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)
  7. react学习(22)---需要export
  8. Cannot read property ‘forceUpdate‘ of undefined
  9. 物联网linux_Linux的未来,Google的物联网标准等
  10. Q125:PBRT-V3,对比VolPathIntegrator::Li()和EstimateDirect()判断Medium的方式
  11. 解读I2C协议和读写流程
  12. wex5 java_[Java教程]WEX5中ajax跨域访问的几种方式
  13. MATLAB R2013 a版及序列号
  14. 百度云 java私塾_JAVA私塾-百度云
  15. 惠普局域网共享打印机设置_打印机usb转网络?打印机共享怎么设置?怎样设置hp打印机共享器操作方法...
  16. 大话2正在连接登录服务器,大话西游手游服务器连接失败进不去解决办法
  17. 2020年中国半导体划片机行业现状分析,国产替代+需求扩张,行业前景广阔「图」
  18. slideup_jQuery slideUp,slideDown,slideToggle
  19. 分布式系统常见问题总结
  20. 立法保护关键信息基础设施意义重大

热门文章

  1. Esp8266天猫精灵_RGB灯_非点灯平台
  2. 全球变暖,为何寒潮这么多?【北极变暖:冷空气有了出口】
  3. 自然图像抠图/视频抠像技术发展情况梳理(image matting, alpha matting, video matting)--计算机视觉专题1
  4. 金融申请评分卡(2)
  5. android生命周期home键,Android横竖屏切换, 手机锁屏以及按Home键和返回键时的Activity的生命周期...
  6. [图文详解]什么是一致性哈希算法,墙裂推荐收藏
  7. 建立适当的索引(ZZ)
  8. Python多线程爬虫之二:爬取王者荣耀高清壁纸(多线程)
  9. Android 大图查看器
  10. openfire html5,HTML5来了,7个混合式移动开发框架