thingsboard真实项目实战五、开发环境配置

第六章、IDEA环境配置

上一章我们总算用Maven把thingsboard正常进行了一次编译,同时我们也把Maven的相关依赖下载到了我们的本地仓库。接下来我们要在Vscode中打开项目。

本章的目的是配置一个对thingsboard进行编辑的开发环境,便于后续在项目中对其进行修改。

经过各种尝试,VScode不管如何设置最后都会报错,最终使用的是IDEA,只要能正常进行一次编译,基本上就能正常进行开发调试了。

如果你对thingsboard没有修改要求,可以跳过这一章。

1、插件

我使用的是IDEA的社区版,因为毕竟不会对其进行大的改动

除了会提示你安装一些插件外,需要单独去安装一下Protocol Buffers插件

2、编程环境搭建

2.1、postgresql数据库

这里我们主要是搭建一个编程环境,真正的部署还是在服务器上的,为了便于测试代码,我在windows环境中也安装了postgresql数据库。

下载地址:需要15以上的版本

EDB: Open-Source, Enterprise Postgres Database Management

无脑下一步,设置好你的密码,这个是postgresql数据的密码。

打开pgAdmin4

右键,注册-->服务器

起个名字,我这里是127.0.0.1

输入主机地址,这里我是本机,127.0.0.1,输入密码后保存,

 右键数据库,创建-->数据库,创建一个名为thingsboard的数据库

保存退出即可。

2.2、 PostgreSQL JDBC

下载最新的JDBC

https://jdbc.postgresql.org/download/

 修改环境变量

按官方文档,在C:\Program Files\目录下新建一个JDBC目录,然后将下载的文件放进去。

以管理员身份运行PowerShell,把下面复制后运行。

[System.Environment]::SetEnvironmentVariable("CLASSPATH", '.;"C:\Program Files\JDBC\postgresql-42.7.3.jar"', [System.EnvironmentVariableTarget]::Machine)

 修改postgresql-42.7.3.jar为你下载的文件名。

2.3、node和yarn

查看ui-ngx\pom.xml文件,其中59行

                        <configuration>
                            <nodeVersion>v20.11.1</nodeVersion>
                            <yarnVersion>v1.22.17</yarnVersion>
                        </configuration>

可以看出需要这个二个版本的软件。

PS:如果你已经有了,那么修改这个为你现在的版本。

没有得话就去下载,官网 msi文件地址:

https://nodejs.org/dist/v20.11.1/​​​​​​​

yarn安装命令:

choco install yarn

修改yarn版本

yarn set version 1.22.17

3、IDEA设置

3.1、设置maven

打开项目,在设置中设置好maven配置。

在idea设置中搜索maven

在构建工具-->maven中,根据自己的实际情况,修改maven参数为自己的路径。

打开源码位置,导入项目。

最好在idea中对项目再进行一次编译。

mvn clean install -DskipTests

大部分的错误都是少了相应的文件,要一个个去核对补充,还是建议使用上一章提供的本地仓库,可以减少绝大部分的错误发生。

3.2、修改程序数据库连接

修改原码  application\src\main\resources\thingsboard.yml

搜索datasource

password: "${SPRING_DATASOURCE_PASSWORD:password}"

替换红色password为你之前输入的postgresql的密码。 

3.3、运行项目

用idea定位到\application\src\main\java\org\thingsboard\server找到ThingsboardServerApplication

右键运行。

我的电脑报错,命令行过长

选择缩短命令行并重新运行。

经过一番等待,运行成功!

4、遇到的问题总结

下面碰到的问题都是我之前用vscode所碰到的,虽然后面用idea整好了,但希望能为大家举一反三。

每次解决一个问题,建议重新打开一次编辑器。

为了避免强烈建议使用前一章的本地maven库。

4.1、Connect timed out

连接超时是常见的错误。大部分情况下这个因为网络问题造成的,所以多做几次reload projects模块既能解决此错误,如果不行,我们以下面的为例。

[{
    "resource": "/C:/thingsboard-3.7/msa/web-ui/pom.xml",
    "owner": "_generated_diagnostic_collection_name_#3",
    "code": "0",
    "severity": 8,
    "message": "org.apache.maven.plugins:maven-dependency-plugin:pom:3.6.1 failed to transfer from https://repo.maven.apache.org/maven2 during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-dependency-plugin:pom:3.6.1 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.108.215] failed: Connect timed out",
    "source": "Java",
    "startLineNumber": 1,
    "startColumn": 1,
    "endLineNumber": 1,
    "endColumn": 1
}]

有问题的部分我高亮了。这个是maven-dependency-plugin-3.6.1.pom文件下载错误,我们找到本地仓库,定位到\.m2\repository\org\apache\maven\plugins\maven-dependency-plugin\3.6.1

可以看到有个maven-dependency-plugin-3.6.1.pom.lastUpdated,但没有maven-dependency-plugin-3.6.1.pom

快速方案是去https://repo1.maven.org/maven2/ 找到文件,下载后放到这个目录中即可。

有时候同一个pom.xml文件中会有多个超时错误,需要逐一排除。

4.2、org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.0.M1 无法下载

[{
    "resource": "/C:/Users/zhangdaye/Desktop/thingsboard-3.7/thingsboard-3.7/application/pom.xml",
    "owner": "_generated_diagnostic_collection_name_#3",
    "code": "0",
    "severity": 8,
    "message": "Failed to execute mojo org.apache.maven.plugins:maven-dependency-plugin:3.6.1:copy {execution: copy-protoc} (org.apache.maven.plugins:maven-dependency-plugin:3.6.1:copy:copy-protoc:generate-sources)\n\norg.eclipse.core.runtime.CoreException: Failed to execute mojo org.apache.maven.plugins:maven-dependency-plugin:3.6.1:copy {execution: copy-protoc}\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeMojo(MavenExecutionContext.java:404)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.lambda$2(MavenExecutionContext.java:355)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:458)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:339)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:354)\r\n\tat org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:57)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.lambda$2(MavenBuilderImpl.java:159)\r\n\tat java.base/java.util.LinkedHashMap.forEach(Unknown Source)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:139)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:164)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.lambda$1(MavenBuilder.java:109)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:458)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:292)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.lambda$0(MavenBuilder.java:100)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:458)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:339)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:278)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:83)\r\n\tat org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:192)\r\n\tat org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1077)\r\n\tat org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)\r\n\tat org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:296)\r\n\tat org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:352)\r\n\tat org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:441)\r\n\tat org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)\r\n\tat org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:444)\r\n\tat org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:555)\r\n\tat org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:503)\r\n\tat org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:585)\r\n\tat org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:207)\r\n\tat org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:300)\r\n\tat org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)\r\nCaused by: org.apache.maven.plugin.PluginExecutionException: Execution copy-protoc of goal org.apache.maven.plugins:maven-dependency-plugin:3.6.1:copy failed: Plugin org.apache.maven.plugins:maven-dependency-plugin:3.6.1 or one of its dependencies could not be resolved: Failed to collect dependencies at org.apache.maven.plugins:maven-dependency-plugin:jar:3.6.1 -> org.apache.maven.reporting:maven-reporting-impl:jar:3.2.0 -> org.apache.maven:maven-core:jar:3.1.0 -> org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.0.M1\r\n\tat org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:100)\r\n\tat org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeMojo(MavenExecutionContext.java:402)\r\n\t... 32 more\r\nCaused by: org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.plugins:maven-dependency-plugin:3.6.1 or one of its dependencies could not be resolved: Failed to collect dependencies at org.apache.maven.plugins:maven-dependency-plugin:jar:3.6.1 -> org.apache.maven.reporting:maven-reporting-impl:jar:3.2.0 -> org.apache.maven:maven-core:jar:3.1.0 -> org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.0.M1\r\n\tat org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolveInternal(DefaultPluginDependenciesResolver.java:221)\r\n\tat org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:165)\r\n\tat org.eclipse.m2e.core.internal.project.registry.EclipsePluginDependenciesResolver.resolve(EclipsePluginDependenciesResolver.java:55)\r\n\tat org.apache.maven.plugin.internal.DefaultMavenPluginManager.createPluginRealm(DefaultMavenPluginManager.java:377)\r\n\tat org.apache.maven.plugin.internal.DefaultMavenPluginManager.lambda$setupPluginRealm$1(DefaultMavenPluginManager.java:340)\r\n\tat org.apache.maven.plugin.DefaultPluginRealmCache.lambda$get$0(DefaultPluginRealmCache.java:156)\r\n\tat java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(Unknown Source)\r\n\tat org.apache.maven.plugin.DefaultPluginRealmCache.get(DefaultPluginRealmCache.java:154)\r\n\tat org.apache.maven.plugin.internal.DefaultMavenPluginManager.setupPluginRealm(DefaultMavenPluginManager.java:339)\r\n\tat org.apache.maven.plugin.DefaultBuildPluginManager.getPluginRealm(DefaultBuildPluginManager.java:205)\r\n\tat org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:98)\r\n\t... 33 more\r\nCaused by: org.eclipse.aether.collection.DependencyCollectionException: Failed to collect dependencies at org.apache.maven.plugins:maven-dependency-plugin:jar:3.6.1 -> org.apache.maven.reporting:maven-reporting-impl:jar:3.2.0 -> org.apache.maven:maven-core:jar:3.1.0 -> org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.0.M1\r\n\tat org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate.collectDependencies(DependencyCollectorDelegate.java:260)\r\n\tat org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:87)\r\n\tat org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:306)\r\n\tat org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolveInternal(DefaultPluginDependenciesResolver.java:212)\r\n\t... 43 more\r\nCaused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.0.M1\r\n\tat org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:245)\r\n\tat org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:175)\r\n\tat org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.resolveCachedArtifactDescriptor(BfDependencyCollector.java:464)\r\n\tat org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.resolveDescriptorForVersion(BfDependencyCollector.java:450)\r\n\tat org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.lambda$resolveArtifactDescriptorAsync$1(BfDependencyCollector.java:417)\r\n\tat java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)\r\n\tat java.base/java.util.stream.ReferencePipeline$Head.forEach(Unknown Source)\r\n\tat org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector.lambda$resolveArtifactDescriptorAsync$4(BfDependencyCollector.java:416)\r\n\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\r\n\tat java.base/java.lang.Thread.run(Unknown Source)\r\nCaused by: org.eclipse.aether.resolution.ArtifactResolutionException: The following artifacts could not be resolved: org.eclipse.sisu:org.eclipse.sisu.plexus:pom:0.3.0.M1 (absent): org.eclipse.sisu:org.eclipse.sisu.plexus:pom:0.3.0.M1 failed to transfer from https://repo.maven.apache.org/maven2 during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.eclipse.sisu:org.eclipse.sisu.plexus:pom:0.3.0.M1 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/146.75.112.215] failed: Connect timed out\r\n\tat org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:473)\r\n\tat org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:261)\r\n\tat org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:243)\r\n\tat org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:234)\r\n\t... 11 more\r\nCaused by: org.eclipse.aether.transfer.ArtifactTransferException: org.eclipse.sisu:org.eclipse.sisu.plexus:pom:0.3.0.M1 failed to transfer from https://repo.maven.apache.org/maven2 during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.eclipse.sisu:org.eclipse.sisu.plexus:pom:0.3.0.M1 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/146.75.112.215] failed: Connect timed out\r\n\tat org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.newException(DefaultUpdateCheckManager.java:235)\r\n\tat org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.checkArtifact(DefaultUpdateCheckManager.java:201)\r\n\tat org.eclipse.aether.internal.impl.DefaultArtifactResolver.gatherDownloads(DefaultArtifactResolver.java:586)\r\n\tat org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:525)\r\n\tat org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:449)\r\n\t... 14 more\r\n",
    "source": "Java",
    "startLineNumber": 21,
    "startColumn": 6,
    "endLineNumber": 21,
    "endColumn": 13
}]

这个错误信息表明,Maven 在执行 maven-dependency-plugin 插件的 copy 目标时遇到了问题,具体是因为 org.eclipse.sisu:org.eclipse.sisu.plexus:jar:0.3.0.M1 这个依赖项无法从 Maven 中央仓库下载,并且由于缓存的失败记录,Maven 在更新间隔时间内不会重新尝试下载。

这个文件在.m2\repository\org\eclipse\sisu\org.eclipse.sisu.plexus\0.3.0.M1这个位置,我之前搞错了一直在C:.m2\repository\org\eclipse\sisu\sisu-plexus这里找。

解决方法同样 是去https://repo1.maven.org/maven2/ 找到文件,下载后放到这个目录中即可。

4.3、空值分析

在打开过程中会提示

Null annotation types have been detected in the project. Do you wish to enable null analysis for this project?

这个我打开了。

4.4、import org.thingsboard.server.gen.transport 找不到

这个问题是这些类是有protobuf自动生成的,只要在idea下安装这个插件就好了

4.5、其他依赖的缺失

在配置中会发生很多的依赖下载问题,我建议你找个大语言模型,然后把错误贴给他,让他列出这个错误信息中所有的缺失的依赖。不然你一个个看太费眼了。

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值