ThingsKit物联网平台开发指南-常见问题(编译问题)

docker镜像编译错误

❓ com.spotify.docker.client.shaded.org.apache.http.impl.execchain.RetryExec execute

信息: I/O exception (java.io.FileNotFoundException) caught when processing request to {}->npipe://localhost:80: \\.\pipe\docker_engine (系统找不到指定的文件。)

答案

maven插件在当前电脑上找不到docker服务。需要添加环境变量使用线上的docker服务。

环境变量名:DOCKER_HOST

环境变量值:tcp://docker所在服务器IP:2375


图片服务器(Minio)更换了访问地址

❓ 图片服务器访问地址变了,为了保证图片资源能正常访问需要怎么操作?

答案

图片访问地址是保存在数据库的。需要更新sys_tenant、sys_user、device_profile、tk_configuration_center、tk_device、tk_data_view、sys_enterprice、sys_app_design和sys_platform_design等表的数据。

UPDATE sys_tenant SET icon = REPLACE(icon, '旧地址', '新地址') WHERE icon LIKE '%旧地址%';
UPDATE sys_user SET avatar = REPLACE(avatar, '旧地址', '新地址') WHERE avatar LIKE '%旧地址%';
UPDATE device_profile SET image = REPLACE(image, '旧地址', '新地址') WHERE image LIKE '%旧地址%';
UPDATE tk_configuration_center SET thumbnail = REPLACE(thumbnail, '旧地址', '新地址') WHERE thumbnail LIKE '%旧地址%';
UPDATE tk_device SET device_info = REPLACE(device_info, '旧地址', '新地址') WHERE device_info LIKE '%旧地址%';
UPDATE tk_data_view SET thumbnail = REPLACE(thumbnail, '旧地址', '新地址') WHERE thumbnail LIKE '%旧地址%';
UPDATE sys_enterprise SET qr_code = REPLACE(qr_code, '旧地址', '新地址') WHERE qr_code LIKE '%旧地址%';
UPDATE sys_app_design SET logo = REPLACE(logo, '旧地址', '新地址') WHERE logo LIKE '%旧地址%';
UPDATE sys_app_design SET background = REPLACE(background, '旧地址', '新地址') WHERE background LIKE '%旧地址%';
UPDATE sys_platform_design SET logo = REPLACE(logo, '旧地址', '新地址') WHERE logo LIKE '%旧地址%';
UPDATE sys_platform_design SET icon = REPLACE(icon, '旧地址', '新地址') WHERE icon LIKE '%旧地址%';
UPDATE sys_platform_design SET background = REPLACE(background, '旧地址', '新地址') WHERE background LIKE '%旧地址%';

docker容器启动失败

❓ docker容器启动时,日志输出找不到启动脚本文件。

ThingsKit物联网平台开发指南-常见问题(编译问题)

答案

脚本文件确实不存在或者文件格式不正确。

第一步:修改容器启动脚本进入容器查看脚本是否存在。

version: '3'
services:
  thingskit: 
    #修改启动脚本,进入容器查看脚本文件是否存在
    command: tail -f /dev/null

第二步:进入容器查看对应文件是否存在或文件格式是否正确

docker exec -it 容器名 bash

第三步:需要将文件格式改为Linux系统的LF模式。

可以直接映射脚本文件到容器内,并调整宿主机内脚本文件的文件格式。

##1/2:修改文件格式
:set ff=unix              #linux

##2/2:保存文件修改内容
:wq

也可以在编译打包之前用开发工具Idea修改脚本文件的文件格式。

ThingsKit物联网平台开发指南-常见问题(编译问题)

js-executor和ui-ngx yarn install失败?

❓ ThingsKit后端使用Maven编译前端组件js-executor和ui-ngx总是yarn install 失败?

ThingsKit物联网平台开发指南-常见问题(编译问题)

答案

Maven使用插件com.github.eirslett:frontend-maven-plugin管理前端的依赖包,依赖包对node的最低版本要求不尽相同,所以我们需要根据依赖包的要求调整node和yarn的配置。具体操作如下:

1.查看maven执行异常的详细信息。

mvn clean install -Dmaven.test.skip=true -e -X

2.结合异常信息调整相关配置。

<plugin>
  <groupId>com.github.eirslett</groupId>
  <artifactId>frontend-maven-plugin</artifactId>
  <configuration>
    <installDirectory>target</installDirectory>
    <workingDirectory>${basedir}</workingDirectory>
  </configuration>
  <executions>
    <execution>
      <id>install node and yarn</id>
      <goals>
        <goal>install-node-and-yarn</goal>
      </goals>
      <configuration>
        <nodeVersion>v14.0.0</nodeVersion>
        <yarnVersion>v1.22.4</yarnVersion>
      </configuration>
    </execution>
    <execution>
      <id>yarn install</id>
      <goals>
        <goal>yarn</goal>
      </goals>
      <configuration>
        <arguments>install</arguments>
      </configuration>
    </execution>
    <execution>
      <id>yarn pkg</id>
      <goals>
        <goal>yarn</goal>
      </goals>
      <configuration>
        <arguments>run pkg</arguments>
      </configuration>
    </execution>
  </executions>
</plugin>

ui-ngx构建失败?yarn run build:prod失败?

ThingsKit物联网平台开发指南-常见问题(编译问题)

答案

删除ui-ngx下的node_modules文件夹,重新进行install

ThingsKit物联网平台开发指南-常见问题(编译问题)

yarn管理的依赖包下载失败、超时?

❓ 使用yarn install命令下载前端依赖包下载失败。提示访问超时?

ThingsKit物联网平台开发指南-常见问题(编译问题)

答案

💡 提示

【当前用户】需要修改为当前登录系统的用户名。

需要将下面提供的压缩文件解压后,放入目录R:\Users\当前用户\AppData\Local\Yarn\Cache\v6中。

v6_aws-crypto.zip

v6_aws-sdk.zip

v6_fast.zip

v6_azure.zip

v6_flot.zip

v6_ngx.zip

v6_types.zip


js-executor和ui-ngx yarn install弹窗口提示“此应用无法在电脑上运行”?

❓ ThingsKit后端使用Maven编译前端组件js-executor和ui-ngx弹窗提示?

ThingsKit物联网平台开发指南-常见问题(编译问题)

答案

使用Maven插件进行前端依赖安装与系统存在兼容问题。直接使用yarn命令手动安装。

1.执行yarn命令安装前端依赖。

cd msa/js-executor   #脚本引擎
cd ui-ngx            #TB前端页面

yarn install

2.将pom.xml文件内容注释掉。

ThingsKit物联网平台开发指南-常见问题(编译问题)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.thingsboard</groupId>
        <version>3.6.4EDGE</version>
        <artifactId>thingsboard</artifactId>
    </parent>
    <groupId>org.thingsboard</groupId>
    <artifactId>ui-ngx</artifactId>
    <packaging>jar</packaging>

    <name>ThingsBoard Edge UI</name>
    <url>https://thingsboard.io</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <main.dir>${basedir}/..</main.dir>
    </properties>

    <build>
        <resources>
            <resource>
                <directory>${project.build.directory}/generated-resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>com.github.eirslett</groupId>
                <artifactId>frontend-maven-plugin</artifactId>
                <configuration>
                    <installDirectory>target</installDirectory>
                    <workingDirectory>${basedir}</workingDirectory>
                </configuration>
                <executions>
                    <execution>
                        <id>install node and npm</id>
                        <goals>
                            <goal>install-node-and-yarn</goal>
                        </goals>
                        <configuration>
                            <nodeVersion>v20.11.1</nodeVersion>
                            <yarnVersion>v1.22.17</yarnVersion>
                        </configuration>
                    </execution>
<!--                    <execution>-->
<!--                        <id>yarn install</id>-->
<!--                        <goals>-->
<!--                            <goal>yarn</goal>-->
<!--                        </goals>-->
<!--                        <configuration>-->
<!--                            <arguments>install --non-interactive --network-concurrency 4 --network-timeout 100000 --mutex network</arguments>-->
<!--                        </configuration>-->
<!--                    </execution>-->
                </executions>
            </plugin>
        </plugins>
    </build>
    <profiles>
<!--        <profile>-->
<!--            <id>yarn-build</id>-->
<!--            <activation>-->
<!--                <activeByDefault>true</activeByDefault>-->
<!--            </activation>-->
<!--            <build>-->
<!--                <plugins>-->
<!--                    <plugin>-->
<!--                        <groupId>com.github.eirslett</groupId>-->
<!--                        <artifactId>frontend-maven-plugin</artifactId>-->
<!--                        <configuration>-->
<!--                            <installDirectory>target</installDirectory>-->
<!--                            <workingDirectory>${basedir}</workingDirectory>-->
<!--                        </configuration>-->
<!--                        <executions>-->
<!--                            <execution>-->
<!--                                <id>yarn build</id>-->
<!--                                <goals>-->
<!--                                    <goal>yarn</goal>-->
<!--                                </goals>-->
<!--                                <configuration>-->
<!--                                    <arguments>run build:prod</arguments>-->
<!--                                </configuration>-->
<!--                            </execution>-->
<!--                        </executions>-->
<!--                    </plugin>-->
<!--                </plugins>-->
<!--            </build>-->
<!--        </profile>-->
        <profile>
            <id>yarn-start</id>
            <activation>
                <property>
                    <name>yarn-start</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.eirslett</groupId>
                        <artifactId>frontend-maven-plugin</artifactId>
                        <configuration>
                            <installDirectory>target</installDirectory>
                            <workingDirectory>${basedir}</workingDirectory>
                        </configuration>
                        <executions>
                            <execution>
                                <id>yarn start</id>
                                <goals>
                                    <goal>yarn</goal>
                                </goals>
                                <configuration>
                                    <arguments>start</arguments>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

多个设备Client如何连接同一个设备?

❓ 多个client如何使用同一个设备token进行连接?

答案

修改application模块下的thingsboard.yml配置参数max_concurrent_sessions_per_device,默认值是1。


如何保证数据传输的安全?

❓ 如何保证数据传输的安全?

答案

您可以使用MQTT(SSL)或HTTPS协议进行传输加密。


Java编译异常: java.lang.IllegalAccessError

❓ java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0xbb3dd4f) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module

💡 提示

Java 9 及以后版本中引入了模块系统(JPMS)而导致的。在 Java 9 之前,JDK 的内部类是可以被直接访问的,但是从 Java 9 开始,这些内部类被封装在模块中,并且默认情况下是不可访问的。

答案

方案1:降低JDK版本

方案2:增加JVM参数【–add-exports】

mvn compile -Dmaven.compiler.release=11 -Dmaven.compiler.args="--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED"

ThingsKit使用的JDK版本?

❓ ThingsKit使用的JDK版本?

答案

JDK11


maven编译提示:gradle插件无法下载

ThingsKit物联网平台开发指南-常见问题(编译问题)

答案

📎gradle-7.1.1-bin.zip

将上面的离线包,放入环境变量GRADLE_USER_HOME指定的目录。如果没有 GRADLE_USER_HOME 目录,即当前用户的.gradle目录下。例如:C:\Users\chengliang\.gradle\wrapper\dists\gradle-7.1.1-bin

例如gradle-7.1.1-bin.zip放入对应的目录wrapper\dists\gradle-7.1.1-bin\f29rtwfnc96ub43tt7p47zsru下。

ThingsKit物联网平台开发指南-常见问题(编译问题)

HTTP Transport Service:FAILURE gradle插件无法下载

ThingsKit物联网平台开发指南-常见问题(编译问题)

答案

检查一下maven的配置,进入maven的安装目录,找到conf修改settings.xml

ThingsKit物联网平台开发指南-常见问题(编译问题)

前端使用的Node版本?

❓ 前端使用的Node版本?

答案

16.13+