一、前言

本文基于 Thingsboard 4.0.2 编写,对应提交Version set to 4.0.2(01c5ba7d37006e1f8a3492afbb3c67d017ca8dd3)

最近我在研究 Thingsboard,因此写下这一系列文章,文本记录构建过程中遇到的问题与解决方法。所用方法依赖代理来解决网络相关的构建失败问题。虽然必须使用代理,但内容仍具备一定的参考价值,尤其适合在环境配置上遇到困难的开发者。由于写作经验有限,欢迎读者指出文中的错误与不足。

二、JDK下载

需要JDK 17,不考虑使用最新的版本,可以到WEJDK学习站下载。

三、源码下载

参考 Building from sources

我们可以从 github.com/thingsboard/thingsboard 获取源码。需要注意的是,根据参考文档的说明,下载 release-* 分支的源码:

git clone -b release-4.0 https://github.com/thingsboard/thingsboard.git --depth 1
cd thingsboard

我曾尝试使用 tag 中的源码,虽然编译成功,但运行时存在功能异常的问题,因此建议务必使用 release-* 分支。

四、Maven同步

Maven 同步过程中的最大难点就是网络问题。本文提供两种思路。

1. 镜像仓库

不会.jpg

2. 代理

默认情况下,我们需要修改 %USERPROFILE%/.m2/settings.xml(例如 C:/Users/Admin/.m2/settings.xml)。

如果你在 IDEA 中修改了 Maven | User settings file(用户设置文件),则应前往你自定义的路径进行修改。

找到<proxies>在下方添加

<proxy>
<id>http</id>
<active>true</active>
<protocol>http</protocol>
<host>127.0.0.1</host>
<port>7890</port>
</proxy>
<proxy>
<id>http2</id>
<active>true</active>
<protocol>https</protocol>
<host>127.0.0.1</host>
<port>7890</port>
</proxy>

其中 hostport 需要根据你的实际代理设置进行修改。建议同时设置 httphttps 两种协议,因为有些工具严格区别两种协议的代理。

五、编译前准备工作

1. 注释许可证检查插件(可选)

使用 Ctrl+Shift+F 全局查找 license-maven-plugin,将每一处包含该插件的 <plugin>...</plugin> 标签块整体注释掉。

该插件会检查每个文件开头是否包含 license 信息,如果你新建的文件缺少相关注释,就会导致编译失败。注意,这类插件在多个模块中可能存在,因此需要全部注释。

示例如下:

<!--            <plugin>-->
<!-- <groupId>com.mycila</groupId>-->
<!-- <artifactId>license-maven-plugin</artifactId>-->
<!-- </plugin>-->

2. ui-ngx编译修改其一(设置maven代理)

报错信息如下:

[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:yarn (yarn build) on project ui-ngx: Failed to run task: 'yarn run build:prod --https-proxy=http://127.0.0.1:7890 --proxy=http://127.0.0.1:7890' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)

这是因为 frontend-maven-plugin 会默认继承 Maven 的代理设置,并将代理参数附加到 yarn 命令中。虽然在依赖安装阶段这是有用的,但在构建时反而可能引发问题。

我们可以通过修改 ui-ngxpom.xml 文件的配置来关闭该行为。搜索 yarn build,在对应的 <execution> 中的 <configuration> 进行修改,示例如下:

<configuration>
<yarnInheritsProxyConfigFromMaven>false</yarnInheritsProxyConfigFromMaven>
<arguments>run build:prod</arguments>
</configuration>

3. ui-ngx编译修改其二 (未设置maven代理,本人未测试)

ui-ngx的编译分为两步。

  1. nodeyarn环境下载。

    可以通过手动下载来解决,参考id为install node and npm<execution>元素,下载对应版本的 node.exeyarn 依赖文件,放置在 msa:js-executormsa:web-uiui-ngxtarget 目录下。下面是文件目录结构示例:

target
├─node
│ └─yarn
│ └─dist
│ ├─bin
│ └─lib
  1. yarn安装前端依赖。

    对于未设置 Maven 代理的情况,可以在 yarn install<execution> 区块中添加 --registry 参数。示例如下:

<configuration>
<arguments>install --registry https://registry.npmmirror.com --non-interactive --network-concurrency 4 --network-timeout 100000 --mutex network</arguments>
</configuration>

六、编译

参考 Building from sources

执行 Maven 的 install 生命周期,开始编译 Thingsboard 源码并发布到本地maven仓库。

跳过测试(可选)

为了提升编译效率,推荐加上 -DskipTests 参数跳过测试步骤。

  • IDEA | Maven(侧边栏) | Execute Maven Goal(执行Maven目标)
  • IDEA | Ctrl+Shift+A | 输入execute maven,找到Execute Maven Goal(执行Maven目标)
  • VSCode(保证安装对应插件)| Ctrl+Shift+P | 输入execute,找到Maven: Execute Commands...(Maven: 执行命令...)| 选择 ThingsBoard

输入install -DskipTests

  • IDEA的内容应该是mvn install -DskipTests
  • VSCode的内容应该是install -DskipTests

七、结尾

如果你已经成功编译通过,那么恭喜你!我认为整个配置过程中最棘手的问题就是网络。你需要在各种工具链中逐一设置代理,尤其是在 IDE 中更为复杂,因为 IDE 经常会自动处理这些过程,导致我们难以直接干预。

[Thingsboard] 1. 源码的下载和编译的更多相关文章

  1. 【转】Android 4.3源码的下载和编译环境的安装及编译

    原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html  告诉windows用户一个不好的消息,windows环境下没法 ...

  2. Android源码的下载和编译

    由于公司会安排我做硬解码这块,所以最近一直想研究一下Android源码,可是Android源码的下载真的挺麻烦的(可能是我第一次下载),参照网上的方法,没有一个可行的,现在就将我的下载过程和大家分享一 ...

  3. Android源码和内核源码的下载,编译和执行

    笔者依据罗升阳老师的<Android 系统源码情景分析>一书,尝试下载,编译和执行Android源码和内核源码.但可能是软件源"被墙"或版本号更新的原因.期间遇到诸多问 ...

  4. Android源码的下载、编译与导入到Android Studio【转】

    本文转载自:http://wl9739.github.io/2016/05/09/Android%E6%BA%90%E7%A0%81%E7%9A%84%E4%B8%8B%E8%BD%BD%E3%80% ...

  5. Ubuntu TensorFlow 源码 Android Demo的编译运行

    Ubuntu TensorFlow 源码 Android Demo的编译运行 一. 安装 Android 的SDK和NDK SDK 配置 A:下载 国内下载地址选最新的: SDK: https://d ...

  6. Spring源码研究--下载-编译-导入eclipse-验证

    一,环境配置 操作系统:Unbutu14.04LTS JDK: 1.8.0_40 git: 1.9.1 gradle: 2.2.1 二,源码下载-编译-导入eclipse-验证 1,下载 使用git直 ...

  7. CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装

    mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...

  8. 【转】Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)

    原文网址:http://blog.csdn.net/qiuxiaolong007/article/details/7860481 记于正文前:环境是ubuntu10.10,android 源码是2.0 ...

  9. 微信小程序实例源码大全下载

     小程序QQ交流群:131894955  小程序开发直播腾讯课堂:  https://edu.csdn.net/course/detail/6743 微信小程序实例源码大全下载 微信小应用示例代码(p ...

  10. android 7源码的下载【转】

    本文转载自:http://www.jianshu.com/p/0799435daf8e android 7源码的下载 step: 1.ubuntu 环境 2.打开终端(快捷键:ctrl + alt + ...

随机推荐

  1. MySQL 中长事务可能会导致哪些问题?

    MySQL 中长事务可能会导致哪些问题? 长事务是指那些执行时间较长.涉及多个操作且没有及时提交或回滚的事务.长事务在 MySQL 中可能引发一系列问题,尤其是在高并发的数据库环境中.以下是长事务可能 ...

  2. 三维装箱问题(3D Bin Packing Problem, 3D-BPP)

    提出问题 集装箱海运家具, 沙发, 茶几, 椅子等等, 有多少套家具,以及每个家具的长宽高都会告诉你. 把所有的家具都装进集装箱里, 要求通过算法算出一共需要多少集装箱. 1.要考虑怎样装, 需要的集 ...

  3. CTF_RSA解密学习

    CTF_RSA解密学习 00X00 .先看了一边李永乐老师的视频 https://www.bilibili.com/video/av26639065/ 00X01.对称.非对称算法了解 对称算法,加解 ...

  4. deepseek+coze实战:一键抓取百条抖音爆款视频,自动存入飞书表格

    大家好,我是汤师爷~ 批量获取抖音视频文案这件事,一直有技术门槛. 很多朋友因为不懂技术,只能花钱买工具来完成这项任务. 今天我要分享一个Coze智能体的解决方案 只需输入关键词就能自动批量获取视频文 ...

  5. windows11 安装WSL2详细过程

    一.什么是 WSL 2 时间来到 2017 年,事情正在起变化.微软正式发布了「适用于 Linux 的 Windows 子系统」,即人们熟知的 Windows Subsystem for Linux, ...

  6. 信息资源管理综合题之“LJ集团信息化项目规划问题”

    一.LJ集团是北京的一家规模巨大的房地产投资公司,早在15年前,该公司出现了如下几个问题:每个业务员手上的用户资料,其他人无法得知,从而导致员工离职时会流失大量潜在客户:业务员繁忙的时候,无法满足客户 ...

  7. 操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出三个进程的同步代码(水果进箱问题-代码补充)”

    1.问题:假设一个水果赛选系统由三个进程A.B.C组成.进程A每次取一个水果,之后存放在货架F上,F的容量为每次只能存放一个水果.若货架上存放的是苹果则让进程B取出,并存放到苹果箱中:若货架上存放的是 ...

  8. 鸿蒙Next开发实战教程—电影app

    最近忙忙活活写了不少教程,但是总感觉千篇一律,没什么意思,大家如果有感兴趣的项目可以私信给幽蓝君写一写. 今天分享一个电影App.   这个项目也比较简单,主要是一些简单页面的开发和本地视频的播放以及 ...

  9. Flutter跨平台发送系统通知和状态栏通知技术浅析

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  10. CTP报单业务介绍

    程序化登录信息 客户如果需要调用API介入柜台进行程序化交易,登录时需要一些基本信息,如下: 1.BrokerID 简称期货编码,是在该期货公司在CTP系统上的编码,为四位数,例如海通期货是8000 ...