[Thingsboard] 1. 源码的下载和编译
一、前言
本文基于 Thingsboard 4.0.2 编写,对应提交Version set to 4.0.2(01c5ba7d37006e1f8a3492afbb3c67d017ca8dd3)
。
最近我在研究 Thingsboard,因此写下这一系列文章,文本记录构建过程中遇到的问题与解决方法。所用方法依赖代理来解决网络相关的构建失败问题。虽然必须使用代理,但内容仍具备一定的参考价值,尤其适合在环境配置上遇到困难的开发者。由于写作经验有限,欢迎读者指出文中的错误与不足。
二、JDK下载
需要JDK 17,不考虑使用最新的版本,可以到WEJDK学习站下载。
三、源码下载
我们可以从 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>
其中 host
和 port
需要根据你的实际代理设置进行修改。建议同时设置 http
和 https
两种协议,因为有些工具严格区别两种协议的代理。
五、编译前准备工作
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-ngx
中 pom.xml
文件的配置来关闭该行为。搜索 yarn build
,在对应的 <execution>
中的 <configuration>
进行修改,示例如下:
<configuration>
<yarnInheritsProxyConfigFromMaven>false</yarnInheritsProxyConfigFromMaven>
<arguments>run build:prod</arguments>
</configuration>
3. ui-ngx编译修改其二 (未设置maven代理,本人未测试)
ui-ngx的编译分为两步。
node
和yarn
环境下载。可以通过手动下载来解决,参考id为
install node and npm
的<execution>
元素,下载对应版本的node.exe
和yarn
依赖文件,放置在msa:js-executor
、msa:web-ui
和ui-ngx
的target
目录下。下面是文件目录结构示例:
target
├─node
│ └─yarn
│ └─dist
│ ├─bin
│ └─lib
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>
六、编译
执行 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. 源码的下载和编译的更多相关文章
- 【转】Android 4.3源码的下载和编译环境的安装及编译
原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html 告诉windows用户一个不好的消息,windows环境下没法 ...
- Android源码的下载和编译
由于公司会安排我做硬解码这块,所以最近一直想研究一下Android源码,可是Android源码的下载真的挺麻烦的(可能是我第一次下载),参照网上的方法,没有一个可行的,现在就将我的下载过程和大家分享一 ...
- Android源码和内核源码的下载,编译和执行
笔者依据罗升阳老师的<Android 系统源码情景分析>一书,尝试下载,编译和执行Android源码和内核源码.但可能是软件源"被墙"或版本号更新的原因.期间遇到诸多问 ...
- 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% ...
- Ubuntu TensorFlow 源码 Android Demo的编译运行
Ubuntu TensorFlow 源码 Android Demo的编译运行 一. 安装 Android 的SDK和NDK SDK 配置 A:下载 国内下载地址选最新的: SDK: https://d ...
- Spring源码研究--下载-编译-导入eclipse-验证
一,环境配置 操作系统:Unbutu14.04LTS JDK: 1.8.0_40 git: 1.9.1 gradle: 2.2.1 二,源码下载-编译-导入eclipse-验证 1,下载 使用git直 ...
- CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装
mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...
- 【转】Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)
原文网址:http://blog.csdn.net/qiuxiaolong007/article/details/7860481 记于正文前:环境是ubuntu10.10,android 源码是2.0 ...
- 微信小程序实例源码大全下载
小程序QQ交流群:131894955 小程序开发直播腾讯课堂: https://edu.csdn.net/course/detail/6743 微信小程序实例源码大全下载 微信小应用示例代码(p ...
- android 7源码的下载【转】
本文转载自:http://www.jianshu.com/p/0799435daf8e android 7源码的下载 step: 1.ubuntu 环境 2.打开终端(快捷键:ctrl + alt + ...
随机推荐
- BotSharp 5.0 MCP:迈向更开放的AI Agent框架
一.引言 在人工智能快速发展的时代,AI Agent(人工智能代理)作为一种能够自主感知环境.决策并执行动作的实体,在众多领域展现出了巨大的潜力.BotSharp 是一个功能强大的开源项目,由 Sci ...
- Chrome 135 版本开发者工具(DevTools)更新内容
Chrome 135 版本开发者工具(DevTools)更新内容 一.性能(Performance)面板改进 1. 性能面板中的配置文件和函数调用现已显示来源和脚本链接 Performance > ...
- 使用Python和SymPy推导斯特林公式
引言 斯特林公式(Stirling's Approximation)是一种用来近似计算阶乘的数学公式.它是数学分析中非常重要的近似公式之一,尤其在概率论.统计学.物理学等领域中广泛应用.本文将使用 P ...
- JDK1.8的ConcurrentHashMap的put方法源码
一.JDK1.8的ConcurrentHashMap的put方法源码 ConcurrentHashMap 是 Java 并发包(java.util.concurrent)中的一个高性能线程安全哈希表实 ...
- AI实战:Text_To_SQL+Prompt+数据库(MySQL)+MCP
一.Text-to-SQL应用概述 什么是Text-to-SQL?Text-to-SQL也称为NL2SQL,是将自然语言查询转换为可在关系数据库上执行的SQL查询的技术. 其核心目标是准确捕捉并反映用 ...
- FastAPI与SQLAlchemy数据库集成
title: FastAPI与SQLAlchemy数据库集成 date: 2025/04/17 15:33:34 updated: 2025/04/17 15:33:34 author: cmdrag ...
- MySQL 中 `LIMIT 100000000, 10` 和 `LIMIT 10` 的执行速度是否相同?
在MySQL中,LIMIT 100000000, 10和LIMIT 10的执行速度通常不会相同.它们的差异在于如何处理数据的检索. LIMIT 10: LIMIT 10表示从查询结果中获取前10条记录 ...
- UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe8 in position...解决方法
运行python程序,出现了以下错误: File "C:/��/python ѧϰ/god_mellonѧϰpython/untitled2/fofa_py2.py", line ...
- 1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "让简单的事情回归简单的本质" -- SMS4J 项目宣言 SMS4J ...
- 重载(Overloading)与重写(Override)的区别?
重载(Overloading)与重写(Override)的区别? No. 区别 重载 重写 1 英文单词 Overloading Override 2 发生范围 发生在一个类里面 发生在继承关系中 3 ...