编译Thingsboard3.7.0的过程记录
1、首先去掉test测试,否则会有一堆问题,pom.xml修改如下:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${surefire.version}</version><configuration><skipTests>true</skipTests></configuration></plugin>
2、同时要配置gradle7.3.3,另外下载gradle-tooling-api-7.3.3.jar(可以通过下载gradle里找出来)
同时通过下面方式上传到你自己本地的maven库里
mvn install:install-file "-Dmaven.repo.local=E:\stsm2\repository" "-DgroupId=org.gradle" "-DartifactId=gradle-tooling-api" "-Dversion=7.3.3" "-Dpackaging=jar" "-Dfile=E:\gradle-tooling-api-7.3.3.jar"
也可以到https://mvnrepository.com/下载gradle-tooling-api-7.3.3.jar
3、这个版本是用java17
4、编译出现下面错误
[INFO] Thingsboard Server JS Client for remote JS execution SUCCESS [ 2.224 s]
[INFO] Thingsboard Server DAO Layer ....................... SUCCESS [ 20.653 s]
[INFO] Thingsboard Rule Engine Components ................. SUCCESS [ 11.866 s]
[INFO] Thingsboard Server Transport Modules ............... SUCCESS [ 0.032 s]
[INFO] Thingsboard HTTP Transport Service ................. FAILURE [ 3.383 s]
[INFO] Thingsboard MQTT Transport Service ................. SKIPPED
[INFO] Thingsboard CoAP Transport Service ................. SKIPPED
[INFO] Thingsboard LwM2m Transport Service ................ SKIPPED
[INFO] Thingsboard SNMP Transport Service ................. SKIPPED
[INFO] ThingsBoard Server UI .............................. SKIPPED
[INFO] Thingsboard Server Tools ........................... SKIPPED
[INFO] Thingsboard Rest Client ............................ SKIPPED
[INFO] ThingsBoard Server Application ..................... SKIPPED
[INFO] ThingsBoard Microservices .......................... SKIPPED
[INFO] ThingsBoard Docker Images .......................... SKIPPED
[INFO] ThingsBoard Web UI Microservice .................... SKIPPED
[INFO] ThingsBoard Version Control Executor ............... SKIPPED
[INFO] ThingsBoard Version Control Executor Microservice .. SKIPPED
[INFO] ThingsBoard Node Microservice ...................... SKIPPED
[INFO] ThingsBoard Transport Microservices ................ SKIPPED
[INFO] ThingsBoard MQTT Transport Microservice ............ SKIPPED
[INFO] ThingsBoard HTTP Transport Microservice ............ SKIPPED
[INFO] ThingsBoard COAP Transport Microservice ............ SKIPPED
[INFO] ThingsBoard LWM2M Transport Microservice ........... SKIPPED
[INFO] ThingsBoard SNMP Transport Microservice ............ SKIPPED
[INFO] ThingsBoard JavaScript Executor Microservice ....... SKIPPED
[INFO] ThingsBoard Monitoring Service ..................... SKIPPED
[INFO] ThingsBoard Monitoring Microservice ................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:59 min
[INFO] Finished at: 2024-09-29T09:56:04+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke (default) on project http: Execution default of goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke failed: A required class was missing while executing org.thingsboard:gradle-maven-plugin:1.0.12:invoke: org/gradle/internal/service/DefaultServiceRegistry
[ERROR] -----------------------------------------------------
[ERROR] realm = plugin>org.thingsboard:gradle-maven-plugin:1.0.12
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
5、主要原因就是 找不到类 org/gradle/internal/service/DefaultServiceRegistry
原因找不到,不知道是什么原因,后来还是用它自己下载的gradle编译才能成功
6、ui-ngx的pom.xml里去掉下面内容,因为也下载不下来,自己手动操作
<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>
<executions><execution><id>yarn build</id><goals><goal>yarn</goal></goals><configuration><arguments>run build:prod</arguments></configuration></execution></executions>
8、到ui-ngx里自己用
yarn install
yarn run build:prod
9、之前编译出现下面错误
[[1;34mINFO[m] Thingsboard Extensions ............................. [1;32mSUCCESS[m [ 0.143 s]
[[1;34mINFO[m] Thingsboard Rule Engine API ........................ [1;32mSUCCESS[m [ 2.339 s]
[[1;34mINFO[m] Thingsboard Server JS Client for remote JS execution [1;32mSUCCESS[m [ 1.052 s]
[[1;34mINFO[m] Thingsboard Server DAO Layer ....................... [1;32mSUCCESS[m [ 13.171 s]
[[1;34mINFO[m] Thingsboard Rule Engine Components ................. [1;32mSUCCESS[m [ 9.574 s]
[[1;34mINFO[m] Thingsboard Server Transport Modules ............... [1;32mSUCCESS[m [ 0.030 s]
[[1;34mINFO[m] Thingsboard HTTP Transport Service ................. [1;31mFAILURE[m [01:09 min]
[[1;34mINFO[m] Thingsboard MQTT Transport Service ................. [1;33mSKIPPED[m
[[1;34mINFO[m] Thingsboard CoAP Transport Service ................. [1;33mSKIPPED[m
[[1;34mINFO[m] Thingsboard LwM2m Transport Service ................ [1;33mSKIPPED[m
[[1;34mINFO[m] Thingsboard SNMP Transport Service ................. [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Server UI .............................. [1;33mSKIPPED[m
[[1;34mINFO[m] Thingsboard Server Tools ........................... [1;33mSKIPPED[m
[[1;34mINFO[m] Thingsboard Rest Client ............................ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Server Application ..................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Microservices .......................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Docker Images .......................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Web UI Microservice .................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Version Control Executor ............... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Version Control Executor Microservice .. [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Node Microservice ...................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Transport Microservices ................ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard MQTT Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard HTTP Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard COAP Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard LWM2M Transport Microservice ........... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard SNMP Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard JavaScript Executor Microservice ....... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Monitoring Service ..................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Monitoring Microservice ................ [1;33mSKIPPED[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] [1;31mBUILD FAILURE[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] Total time: 03:12 min
[[1;34mINFO[m] Finished at: 2024-09-30T13:13:19+08:00
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;31mERROR[m] Failed to execute goal [32morg.thingsboard:gradle-maven-plugin:1.0.12:invoke[m [1m(default)[m on project [36mhttp[m: [1;31morg.gradle.tooling.GradleConnectionException: Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-7.3.3-bin.zip'.[m -> [1m[Help 1][m
[[1;31mERROR[m]
[[1;31mERROR[m] To see the full stack trace of the errors, re-run Maven with the [1m-e[m switch.
[[1;31mERROR[m] Re-run Maven using the [1m-X[m switch to enable full debug logging.
[[1;31mERROR[m]
[[1;31mERROR[m] For more information about the errors and possible solutions, please read the following articles:
[[1;31mERROR[m] [1m[Help 1][m http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[[1;31mERROR[m]
[[1;31mERROR[m] After correcting the problems, you can resume the build with the command
<groupId>org.thingsboard</groupId><artifactId>gradle-maven-plugin</artifactId><configuration><gradleProjectDirectory>${main.dir}/packaging/${pkg.type}</gradleProjectDirectory><gradleDistribution>https://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip</gradleDistribution><gradleInstallationDir>D:\\gradle7.3.3</gradleInstallationDir><tasks><task>build</task><task>buildDeb</task><task>buildRpm</task></tasks><args>
必须要用它下载的gradle来编译才行,否则自己搞个环境gradle7.3.3老是报下面错误
Execution default of goal org.thingsboard:gradle-maven-plugin:1.0.12:invoke failed: A required class was missing while executing org.thingsboard:gradle-maven-plugin:1.0.12:invoke: org/gradle/internal/service/DefaultServiceRegistry
9、上面解决后,出现下面错误,就是web-ui模块出现问题,因为要下载yarn进行打包等,删除掉了,所以少了东西,需要手工自己进行下载yarn,打包了
[[1;34mINFO[m] ThingsBoard Docker Images .......................... [1;32mSUCCESS[m [ 2.426 s]
[[1;34mINFO[m] ThingsBoard Web UI Microservice .................... [1;31mFAILURE[m [ 1.345 s]
[[1;34mINFO[m] ThingsBoard Version Control Executor ............... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Version Control Executor Microservice .. [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Node Microservice ...................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Transport Microservices ................ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard MQTT Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard HTTP Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard COAP Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard LWM2M Transport Microservice ........... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard SNMP Transport Microservice ............ [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard JavaScript Executor Microservice ....... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Monitoring Service ..................... [1;33mSKIPPED[m
[[1;34mINFO[m] ThingsBoard Monitoring Microservice ................ [1;33mSKIPPED[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] [1;31mBUILD FAILURE[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] Total time: 06:14 min
[[1;34mINFO[m] Finished at: 2024-09-30T14:55:03+08:00
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;31mERROR[m] Failed to execute goal [32morg.apache.maven.plugins:maven-assembly-plugin:3.0.0:single[m [1m(assembly)[m on project [36mweb-ui[m: [1;31mFailed to create assembly: Error adding file to archive: E:\test\thingsboard-master\msa\web-ui\target\package\windows\bin\tb-web-ui.exe[m -> [1m[Help 1][m
[[1;31mERROR[m]
[[1;31mERROR[m] To see the full stack trace of the errors, re-run Maven with the [1m-e[m switch.
[[1;31mERROR[m] Re-run Maven using the [1m-X[m switch to enable full debug logging.
[[1;31mERROR[m]
[[1;31mERROR[m] For more information about the errors and possible solutions, please read the following articles:
[[1;31mERROR[m] [1m[Help 1][m http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[[1;31mERROR[m]
[[1;31mERROR[m] After correcting the problems, you can resume the build with the command
[[1;31mERROR[m] [1mmvn <args> -rf :web-ui
打包如下,半天下载不下来,看来又要手工去下载了。放到PKG_CACHE_PATH里:

E:\test\thingsboard-master\msa\web-ui>yarn pkg
yarn run v1.21.1
$ tsc && pkg -t node16-linux-x64,node16-win-x64 --out-path ./target ./target/src && node install.js
> pkg@5.8.1
> Fetching base Node.js binaries to PKG_CACHE_PATHfetched-v16.16.0-linux-x64 [ ] 1%
需要放在这个地方,只有手工下载3.4版本了从在 Releases · vercel/pkg-fetch · GitHub 找到 v3.4下载
10、下载后修改如下的名称才行,总共需要下载4个,如下修改名称


11、这样总算编译成功

附:重新自动编译mvn clean install -DskipTests
删除maven下载有问题的包库文件,以便下次正确下载
for /r %i in (*.lastUpdated) do del %i
相关文章:
编译Thingsboard3.7.0的过程记录
1、首先去掉test测试,否则会有一堆问题,pom.xml修改如下: <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>${surefire.version}</ve…...
vulnhub-THE PLANETS-EARTH靶机
下载并导入靶机至VMWare,设置网络模式为NAT,开机 开启攻击机(kali),也设置为Nat模式,与靶机处于同一网段 扫描靶机ip Nmap 192.168.114.0/24 扫描网段内活跃的主机 可以推断靶机ip为192.168.114.129 扫描…...
【C语言】分支和循环(2)
🤔个人主页: 起名字真南 😙个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 关系操作符2 条件操作符3 逻辑操作符 :|| ,&& ,!3.1 逻辑取反运算符3.2 与运算符3.3 或运算符3.4 练习闰年判断3.5 短…...
Python数据分析-远程办公与心理健康分析
一、研究背景 随着信息技术的飞速发展和全球化的推进,远程工作(Remote Work)成为越来越多企业和员工的选择。尤其是在2020年新冠疫情(COVID-19)爆发后,全球范围内的封锁措施使得远程工作模式迅速普及。根据…...
LabVIEW提高开发效率技巧----使用动态事件
在LabVIEW开发过程中,用户交互行为可能是多样且不可预知的。为应对这些变化,使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧,并结合实际案例,说明如何通过动态事件提高程序…...
【STM32开发之寄存器版】(五)-窗口看门狗WWDG
一、前言 窗口看门狗简介: 窗口看门狗通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个M…...
Leetcode203.移除链表元素-Python
题目链接:203. 移除链表元素 - 力扣(LeetCode) 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入&a…...
属性拷贝MapStruct
端请求通过VO对象接收,并通过DTO对象进行流转,最后转换成DO对象与数据库DAO层进行交互,反之亦然。 当业务简单的时候,可以通过手动编码getter/setter函数来复制对象属性。但是当业务变的复杂,对象属性变得很多&#x…...
Chromium 添加书签功能浅析c++
1、在点击添加书签时候此UI控制逻辑代码在 chrome\browser\ui\views\bookmarks\bookmark_bar_view.cc chrome\browser\ui\views\bookmarks\bookmark_bar_view.h 可以在此看到完成 移除 按钮逻辑,以及书签监听事件等。。。 // Implementation for BookmarkNodeAdd…...
Spring Cloud Netflix Ribbon 负载均衡详解和案例示范
1. 引言 在传统的集中式架构中,负载均衡器一般是放置在服务器端的,例如 Nginx等。随着微服务架构的兴起,服务实例的数量和部署地点变得更加动态和分布式,这使得在客户端进行负载均衡成为了一种可行且更灵活的方案。Netflix Ribbo…...
Armeria gPRC 高级特性 - 装饰器、无框架请求、阻塞处理器、Nacos集成、负载均衡、rpc异常处理、文档服务......
文章目录 定义一个示例高级特性装饰器概述简单案例多种装饰方式 无框架请求概述使用方式 阻塞任务处理器背景概述多种使用方式 rpc 异常统一处理使用方式更详细的异常信息 Armeria 提供 gRPC 客户端多种调用方式同步调用异步调用使用装饰器 负载均衡简单案例Armeria 提供的所有…...
如何制作一个企业网站,建设网站的基本步骤有哪些?
企业网站是企业的门面和名片,决定网民对企业的第一印象,因此,现在很多公司想做一个属于自己网站,但是不知道怎么做,更不知道从何做起,更别说做成了。为了能够让大家清楚如何做一个企业网站,现在…...
01-python+selenium自动化测试-基础学习
前言 基于python3和selenium3做自动化测试,俗话说:工欲善其事必先利其器;没有金刚钻就不揽那瓷器活,磨刀不误砍柴工,因此你必须会搭建基本的开发环境,掌握python基本的语法和一个IDE来进行开发,…...
【redis-05】redis保证和mysql数据一致性
redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…...
写一个登录判断机制py
创建一个简单的登录机制涉及到用户输入的验证和与数据库中存储的凭证的比较。以下是一个使用Python语言和SQLite数据库的示例。这个例子仅用于教学目的,实际应用中应该使用更安全的方法来存储和验证密码,比如使用密码哈希。 首先,你需要安装…...
特征点检测与匹配是计算机视觉中的基础任务之一,广泛应用于图像配准、物体识别、运动估计、三维重建等领域。
特征点检测与匹配是计算机视觉中的基础任务之一,广泛应用于图像配准、物体识别、运动估计、三维重建等领域。下面是一些关键的知识点: 1. 特征点检测 特征点检测的目的是从图像中找到独特的、稳定的点,这些点在图像变化(如旋转、…...
python——Echarts现交互式动态可视化
数据展示 20192018201720162015201420132012北京5817.15785.91765430.78755081.264723.864027.16093661.10973314.934天津2410.252106.23972310.35522723.52667.112390.35182079.07161760.0201河北3742.673513.86433233.83322849.872649.182446.61662295.62032084.2825山西234…...
【含开题报告+文档+PPT+源码】基于SSM框架的民宿酒店预定系统的设计与实现
开题报告 随着人们旅游需求的增加,民宿行业呈现出快速发展的趋势。传统的住宿方式逐渐无法满足人们对个性化、舒适、便捷的需求,而民宿作为一种新型的住宿选择,逐渐受到人们的青睐。民宿的特点是具有独特的风格、便捷的地理位置、相对亲近的…...
正确理解协程
import asyncio# 定义一个异步函数(协程) async def say_after(delay, what):# 等待指定的时间await asyncio.sleep(delay)# 打印消息print(what)# 定义另一个异步函数 async def main():# 同时启动两个协程,并等待这2个协程结束await say_af…...
蒙特卡罗方法 - 采样和蒙特卡罗方法篇
序言 蒙特卡罗( Monte Carlo \text{Monte Carlo} Monte Carlo)方法,也被称为计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第二次世界大战期间研制原子弹的“曼哈顿计划”。其核心思想是使用随机数&am…...
Flutter弹窗层级混乱?手把手教你用Overlay管理多个弹窗的显示顺序
Flutter弹窗层级管理实战:用Overlay解决多弹窗叠加难题 在移动应用开发中,弹窗是用户交互的重要组成部分。但当多个弹窗同时出现时,开发者常会遇到"哪个弹窗应该显示在最上层"的困扰。想象一下这样的场景:用户正在填写…...
Wan2.2-I2V-A14B企业应用:品牌广告片AI辅助生成+人工精修工作流
Wan2.2-I2V-A14B企业应用:品牌广告片AI辅助生成人工精修工作流 1. 企业级视频创作新范式 在品牌营销领域,高质量视频内容的需求正呈指数级增长。传统视频制作流程面临三大痛点:创意实现周期长、专业团队成本高、批量生产难度大。Wan2.2-I2V…...
轻量级二维码工具性能优化:从加载到部署的全流程实践
轻量级二维码工具性能优化:从加载到部署的全流程实践 【免费下载链接】qrcodejs Cross-browser QRCode generator for javascript 项目地址: https://gitcode.com/gh_mirrors/qr/qrcodejs 二维码生成功能已成为现代Web应用的常见需求,但传统实现方…...
35:L构建数据泄露检测:蓝队的数据保护
作者: HOS(安全风信子) 日期: 2026-03-11 主要来源平台: GitHub 摘要: 当基拉开始针对数据进行攻击时,数据泄露成为蓝队防御的关键挑战。L构建了数据泄露检测系统,通过AI算法分析数据流动、访问模式和异常行…...
tmux快速上手指南:3个核心命令与1个关键快捷键解析
1. 为什么你需要tmux? 如果你经常在服务器上工作,肯定遇到过这样的场景:正在跑一个耗时很长的任务,突然网络波动导致SSH连接断开,所有进程都被终止,几个小时的成果瞬间消失。这种时候,tmux就是你…...
从钟形曲线到假设检验:用Python可视化带你理解正态分布在数据分析中的实际应用
从钟形曲线到假设检验:用Python可视化理解正态分布的核心价值 第一次接触统计学时,我被那些复杂的公式和抽象概念搞得晕头转向。直到有一天,导师在咖啡杯旁画了一条钟形曲线:"看,这就是正态分布——它像不像我们部…...
法律文书助手:OpenClaw+Qwen3-32B的合同条款审查与风险提示
法律文书助手:OpenClawQwen3-32B的合同条款审查与风险提示 1. 为什么需要本地化的法律文书助手? 去年处理一份股权投资协议时,我经历了传统法律AI工具的典型痛点:上传合同到第三方平台后,法务团队突然发现协议中涉及…...
大多数加密API都不够用:量化团队真正需要的数据到底是什么?
如果你做过加密相关开发,无论是: 量化交易数据平台研究分析风控系统 你大概率都会经历一个阶段: 👉 API 接了一堆,但始终“不够用”。 常见的一个误区 很多人在刚开始做数据接入时,会觉得: …...
像素幻梦工坊实战落地:数字艺术教育机构像素创作课AI教具部署
像素幻梦工坊实战落地:数字艺术教育机构像素创作课AI教具部署 1. 项目背景与教育价值 在数字艺术教育领域,像素艺术作为入门门槛较低但创意空间广阔的艺术形式,正受到越来越多教育机构的青睐。然而传统像素艺术教学面临两大挑战:…...
雨课堂运动与健康网课高效学习指南
1. 雨课堂运动与健康网课学习资源整合 第一次接触雨课堂的运动与健康网课时,我和很多同学一样手忙脚乱。平台上的资料分散在各个角落,视频、文档、测试题混在一起,根本不知道从哪里开始。后来摸索出一套资源整理方法,效率直接翻倍…...
