概 述:ThingsBoard作为物联网(IOT)平台代表,专注于设备管理、数据采集、处理、可视化及远程控制等核心功能,凭借物联网协议的兼容性、可扩展性和规则链的通用性在各类物联网应用场景中具有广泛的应用。其社区版的编译是初学者面临的首要问题,本文从编译环境、编译步骤、编译问题三个方面对笔者实际操作ThingsBoard4.0.2的编译过程进行叙述,编译过程中最大的问题是编译程序须调用其自身下载的Gradle,手动配置的Gradle无法被其调用而报的org.thingsboard :gradle-maven-plugin:1.0.12:invoke错误。
编译环境:
JDK:17
Maven:3.6.3
OS:Windows10
编译步骤:
第一步:下载源码
到官网(https://github.com/thingsboard/thingsboard)master下选择rc-4.0.2下载zip文件。
第二步:环境配置
JDK17安装,配置JAVA_HOME环境变量,并将其添加至path变量中;Maven安装,配置MAVEN_HOME环境变量,并将其添加至path变量中,同时配置国内镜像。
<!--阿里云镜像--> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> |
第三步:源码编译
由于ThingsBoard前端采用AngularJS开发,国内前端主流为Vue,因此本次编译仅对工程后端进行编译。在编译前需要在工程pom文件中将ui-ngx模块注释,同时在application工程pom文件中注释掉对该模块的依赖。
在msa工程pom文件中注释web-ui模块和js-executor模块。
打开网络代理,部分依赖需要从国外下载,故这一步是需要的。
开始编译,命令行进入工程所在目录,执行如下命令,启动工程编译过程。
mvn clean install -DskipTests
编译过程中会遇到问题,主要问题及解决方法详见后文“主要问题章节”。
成功执行完编译命令后,将显示编译成功。
主要问题及解决方法:
- org.thingsboard:gradle-maven-plugin:1.0.12:invoke failed A required class was missing while executing org.thingsboard :gradle-maven-plugin:1.0.12:invoke: org/gradle/internal/service/DefaultServiceRegistry
主要原因为ThingsBoard采用Gradle和Maven混合编译,并且需要调用其自行下载的Gradle执行部分编译过程。客户端自行配置的Gradle环境无法被调用,故报Gradle核心类无法调用的错误。
解决本问题的关键点是使用网络代理,由编译程序根据工程配置自行下载其所需要的Gradle并在C盘用户目录下自行解压安装,这样在编译时编译程序将自动调用该Gradle执行任务。
编译程序自动下载在c盘下载gradle-7.3.3
编译程序自动调用gradle-7.3.3执行编译任务
2.Failed to execute goal io.github.git-commit-id:git-commit-id-maven-plugin:5.0.0:revision (get-the-git-infos) on project application: .git directory is not found! Please specify a valid [dotGitDirectory] in your pom.xml
如工程不涉及git提交,可通过配置failOnNoGitDirectory参数跳过。