1、获取 Thingsboard 源码
使用 git clone thingsboard 源码,并切换到稳定 tag
git clone https://github.com/thingsboard/thingsboard.git
git checkout v3.2.2
2、环境要求
- java 11
- Maven
3、编译
3.1、移除 license 检查
将项目根目录 pom.xml 里的 license-maven-plugin 插件移除
删除如下内容:
<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/.browserslistrc</exclude>
<exclude>**/yarn.lock</exclude>
<exclude>**/*.raw</exclude>
<exclude>**/apache/cassandra/io/**</exclude>
<exclude>.run/**</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>
3.2、修改 frontend-maven-plugin 插件版本
需要修改 frontend-maven-plugin 插件版本到 1.12.0,在项目中全局搜索 frontend-maven-plugin 然后将其版本号改为 1.12.0 ,否则会导致安装 node、yarn 失败
3.3、M1 版本的 Mac 需要修改 com.google.protobuf 的 classifier
默认是根据当前编译平台获取对应的 classifier , 但是因为暂时没有提供 M1 版本 也就是 os-arm64版本的包,所以需要手动将这个修改为 osx-x86_64
需要修改根目录下 pom.xml 的两处地方:
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.google.protobuf</groupId>
<artifactId>protoc</artifactId>
<version>${protobuf.version}</version>
<classifier>osx-x86_64</classifier>
<type>exe</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
.......
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:osx-x86_64</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.0:exe:osx-x86_64</pluginArtifact>
</configuration>
默认是使用 ${os.detected.classifier}获取的,将其改为osx-x86_64
3.4、编译
使用 mvn install 进行编译
mvn install -Dmaven.test.skip=true
编译完成后会在项目的 application/target目录下生成对应平台的包,如下:
archive-tmp test-classes
bin thingsboard-3.2.2-1.noarch.rpm
classes thingsboard-3.2.2-boot.jar
conf thingsboard-3.2.2.jar
control thingsboard-windows.zip
data thingsboard.deb
debian thingsboard.rpm
generated-sources thingsboard_3.2.2-1_all.changes
generated-test-sources thingsboard_3.2.2-1_all.deb
maven-archiver tmp
maven-status windows
protoc-3.11.4-osx-x86_64.exe
4、运行
4.1 修改数据连接
Thingsboard 运行需要数据库环境,默认使用的是 postgres, 所以需要提供一个 postgres 数据库服务,然后修改 application/src/main/resources/thingsboard.yml 将其中的 postgres 的连接信息改为自己的数据库服务信息
spring:
data:
jpa:
repositories:
enabled: "true"
jpa:
open-in-view: "false"
hibernate:
ddl-auto: "none"
database-platform: "${SPRING_JPA_DATABASE_PLATFORM:org.hibernate.dialect.PostgreSQLDialect}"
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:postgres}"
hikari:
maximumPoolSize: "${SPRING_DATASOURCE_MAXIMUM_POOL_SIZE:16}"
修改连接信息后,需要重新执行编译命令才会生效
4.2、初始化数据
需要在数据库中提前创建好 thingsboard的库,也可以是自定义库名,跟上面的数据库连接信息保持一致即可。
然后进入application/target/bin/install目录,执行如下命令:
chmod +x install_dev_db.sh
./install_dev_db.sh
执行完后会在数据库中初始化测试数据,如果是生产环境的话则将 install_dev_db.sh 换成 install.sh
4.3 运行
运行 application/src/main/java/org/thingsboard/server/ThingsboardServerApplication.java 即可启动 Thingsboard 服务
或者直接运行打包出来的 thingsboard-3.2.2-boot.jar : java -jar thingsboard-3.2.2-boot.jar
启动后访问:http://127.0.0.1:8080
测试账号:
- 平台管理员:sysadmin@thingsboard.org sysadmin
- 租户管理员:tenant@thingsboard.org tenant
- 普通用户:customer@thingsboard.org customer