当前位置: 首页 > news >正文

47小型项目的规划与实施

每天五分钟学Linux | 第四十七课:小型项目的规划与实施

大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了并发编程的知识,包括如何管理和使用进程与线程。今天,我们将探讨如何规划和实施一个小项目,帮助你将所学的知识应用到实际工作中。

规划与实施的重要性

规划是任何项目成功的关键。良好的规划不仅能够帮助明确目标,还能确保资源的有效利用。实施则是将计划转化为实际行动的过程。在本节课中,我们将通过一个简单的小型项目示例来说明如何进行有效的规划和实施。

项目案例:创建一个简单的文件管理系统

假设你想要创建一个简单的文件管理系统,该系统可以记录用户上传的文件,并提供基本的文件管理功能,如上传、下载、删除文件等。我们将使用Python语言和Flask框架来构建这个系统,并使用SQLite数据库来存储文件元数据。

项目规划阶段
1. 明确需求
  • 功能需求

    • 用户可以上传文件。
    • 用户可以查看已上传的文件列表。
    • 用户可以选择下载或删除某个文件。
  • 非功能需求

    • 系统应易于使用。
    • 系统应具备一定的安全性,例如验证上传文件的类型。
    • 系统应能够处理并发请求。
2. 设计架构

确定项目的架构设计,包括前端界面和后端逻辑。

  • 前端:使用HTML/CSS和JavaScript来构建简单的用户界面。
  • 后端:使用Python Flask框架来处理HTTP请求,并与SQLite数据库交互。
3. 技术选型

选择合适的技术栈来实现项目。

  • 前端:HTML/CSS/JavaScript
  • 后端:Python Flask
  • 数据库:SQLite
4. 制定计划

将整个项目分解成若干个小的任务,并制定时间表。

  • 第1周:搭建开发环境,创建项目结构。
  • 第2周:实现文件上传功能。
  • 第3周:实现文件列表展示功能。
  • 第4周:实现文件下载和删除功能。
  • 第5周:进行测试,修复bug,部署上线。
项目实施阶段
1. 准备开发环境
  • 安装Python

    sudo apt install python3 python3-pip # Debian/Ubuntu
    sudo yum install python3 python3-pip # CentOS/Fedora
    
  • 安装Flask

    pip3 install flask
    
  • 安装SQLite

    sudo apt install sqlite3 # Debian/Ubuntu
    sudo yum install sqlite # CentOS/Fedora
    
2. 创建项目结构
project/
├── app.py
├── static/
│   └── css/
│   └── js/
├── templates/
│   └── index.html
└── requirements.txt
3. 编写后端逻辑

创建app.py文件:

from flask import Flask, request, render_template, send_from_directory, abort
import os
import sqlite3app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDERdef init_db():conn = sqlite3.connect('database.db')c = conn.cursor()c.execute('''CREATE TABLE IF NOT EXISTS files(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,path TEXT NOT NULL)''')conn.commit()conn.close()@app.route('/')
def index():conn = sqlite3.connect('database.db')c = conn.cursor()c.execute('SELECT id, name FROM files')files = c.fetchall()conn.close()return render_template('index.html', files=files)@app.route('/upload', methods=['POST'])
def upload_file():if 'file' not in request.files:abort(400)file = request.files['file']if file.filename == '':abort(400)if file:filename = file.filenamefilepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)file.save(filepath)conn = sqlite3.connect('database.db')c = conn.cursor()c.execute('INSERT INTO files (name, path) VALUES (?, ?)', (filename, filepath))conn.commit()conn.close()return 'File uploaded successfully'@app.route('/download/<int:id>')
def download_file(id):conn = sqlite3.connect('database.db')c = conn.cursor()c.execute('SELECT path FROM files WHERE id=?', (id,))row = c.fetchone()if row is None:abort(404)filepath = row[0]conn.close()return send_from_directory(os.path.dirname(filepath), os.path.basename(filepath))@app.route('/delete/<int:id>')
def delete_file(id):conn = sqlite3.connect('database.db')c = conn.cursor()c.execute('SELECT path FROM files WHERE id=?', (id,))row = c.fetchone()if row is None:abort(404)filepath = row[0]os.remove(filepath)c.execute('DELETE FROM files WHERE id=?', (id,))conn.commit()conn.close()return 'File deleted successfully'if __name__ == '__main__':init_db()app.run(debug=True)
4. 创建前端页面

创建templates/index.html文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>文件管理系统</title><link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body><h1>文件管理系统</h1><form action="/upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><button type="submit">上传文件</button></form><table><thead><tr><th>ID</th><th>文件名</th><th>操作</th></tr></thead><tbody>{% for file in files %}<tr><td>{{ file[0] }}</td><td>{{ file[1] }}</td><td><a href="{{ url_for('download_file', id=file[0]) }}">下载</a><a href="{{ url_for('delete_file', id=file[0]) }}">删除</a></td></tr>{% endfor %}</tbody></table>
</body>
</html>
5. 测试与部署
  • 测试:确保所有功能按预期工作,修复发现的bug。
  • 部署:可以选择将应用部署到云服务器上,如阿里云、AWS等。
结语

通过今天的课程,你学习了如何规划和实施一个小项目。掌握了这些基本技能后,你可以将所学的知识应用于实际工作中,解决实际问题,并为后续的学习和开发工作打下坚实的基础。

如果你有任何问题或需要进一步的帮助,请随时留言。我们下节课将继续带你深入了解Linux的更多知识。再见!


这篇文章旨在帮助读者了解如何规划和实施一个小项目,并通过具体的示例演示项目规划与实施的基本步骤。通过学习这些基本操作,即使是非IT专业的读者也能轻松上手,并为进一步的实战和工作打下坚实的基础。希望这篇文章能够帮助你更好地理解和应用Linux操作系统。

相关文章:

47小型项目的规划与实施

每天五分钟学Linux | 第四十七课&#xff1a;小型项目的规划与实施 大家好&#xff01;欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中&#xff0c;我们学习了并发编程的知识&#xff0c;包括如何管理和使用进程与线程。今天&#xff0c;我们将探讨如何规划…...

Linux---ps命令

​​​​​​Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名&#xff0c;运行此进程的用户名。PID: 进程ID&#xff08;Process ID&#xff09;&#xff0c;每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...

Qt Qt::UniqueConnection 底层调用

在这里插入图片描述 步骤1&#xff1a; 1&#xff1a;判断槽函数连接方式&#xff0c; 以及信号对象是否有效2&#xff1a; 信号计算格式是否 大于 signal_index 目前调试 signal_index 不太清楚怎末计算的&#xff08;有清楚的帮忙街道&#xff09;3&#xff1a;获取槽函数对…...

Jenkins + gitee 自动触发项目拉取部署(Webhook配置)

目录 前言 Generic Webhook Trigger 插件 下载插件 ​编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建&#xff0c;本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目&#xff1b; Generic Webhook Trigger 插件 实现代码推送后&#xff0c;触…...

2025-2026财年美国CISA国际战略规划(下)

文章目录 前言四、加强综合网络防御&#xff08;一&#xff09;与合作伙伴共同实施网络防御&#xff0c;降低集体风险推动措施有效性衡量 &#xff08;二&#xff09;大规模推动标准和安全&#xff0c;以提高网络安全推动措施有效性衡量 &#xff08;三&#xff09;提高主要合作…...

aws ses生产环境申请

* aws ses生产环境申请经验&#xff1a; 要有域名邮箱作为反馈联系邮箱 且有收发记录 最好使用aws的WorkMail要说明清晰的使用用途、预估量、如何处理退信和投诉、防spam策略 等内容&#xff0c;这里可以先问问AI&#xff08;比如&#xff1a;如何处理退信和投诉&#xff1f;…...

velocity unable to find resource ‘xxx.vm‘ in any resource loader

大家好&#xff0c;我是 程序员码递夫。 [TOC]velocity unable to find resource ‘xxx.vm’ in any resource loader 1.问题 今天帮客户解决一个远古 java web系统的bug , 客户的系统用了非常古老的框架 jdk1.6struc1.1 velocity1.5 运行在tomcat6环境。 客户想迁移到 tomc…...

InfluxDB时序数据库笔记(一)

InfluxDB笔记一汇总 1、时间序列数据库概述2、时间序列数据库特点3、时间序列数据库应用场景4、InfluxDB数据生命周期5、InfluxDB历史数据需要另外归档吗&#xff1f;6、InfluxDB历史数据如何归档&#xff1f;7、太麻烦了&#xff0c;允许的话选择设施完备的InfluxDB云产品吧8、…...

c#编码技巧(十九):各种集合特点汇总

.NET 常用集合对比&#xff1a; .NET 常见的线程安全集合 .NET 只读集合...

Python中的__init__()函数

什么是__init__()函数? __init__()函数其实是用于初始化新建对象的状态&#xff0c;当你创建一个类的实例时&#xff0c;__init__()函数的方法就会被自动调用&#xff0c;允许你为对象设置初始属性或执行初始化操作。 接下来这里让我们举例说明&#xff1a; 首先&#xff0c…...

写的bug与调试

无论是代码中的逻辑混乱&#xff0c;还是环境配置引发的灾难&#xff0c;亦或是多人协作产生的诡异问题&#xff0c;都可以在这里分享。把你职业生涯里遇到或写过的最大 bug 故事讲出来&#xff0c;让大家一起感受那些惊心动魄、哭笑不得的瞬间&#xff0c;也为后来人敲响警钟吧…...

本地安装YAPI

项目中用到很多的RESTAPI&#xff0c;光靠人工管理或者普通文档肯定是不行的&#xff0c;翻了很多的RESTAPI管理工具&#xff0c;还是选择了YAPI&#xff0c;原因有2&#xff0c;一个是接口位于内网&#xff0c;外网网站上管理测试不到内网接口&#xff0c;另外一个是使用方式&…...

嵌入式Linux基于IMX6ULL tslib学习总结

目录 1. tslib开源库介绍1.1 tslib主要功能1.2 架构 2. tslib代码简单分析2.1 ts_print_mt.c分析代码2.2 ts_setup代码分析2.3 ts_open代码分析2.4 ts_config代码分析2.5 ts_read_mt代码分析2.6 tslib中4个模块的含义 3. 使用tslib库打印触摸屏2点之间的距离 基于韦东山IMX6ULL…...

pinia的使用

一、安装 Pinia 首先&#xff0c;确保你的项目已经安装了 Vue.js&#xff08;版本 3.x&#xff09;。如果没有&#xff0c;请先安装 Vue。 然后使用包管理器&#xff08;如 npm 或 yarn&#xff09;安装 Pinia&#xff1a; 通过 npm 安装&#xff1a;npm install pinia通过 ya…...

亚信安全携手飞书“走近先进” 与保隆科技探索制造业数字化转型

亚信安全携手飞书组织举办“走近先进”活动。近日活动“走近”了中国汽车供应链百强、上海市制造业五十强企业——上海保隆汽车科技股份有限公司&#xff08;以下简称“保隆科技”&#xff09;。活动围绕“突破桎梏 加速升级”的主题&#xff0c;聚焦企业数字化转型的核心议题&…...

mybatis-plus方法无效且字段映射失败错误排查

问题&#xff1a; Invalid bound statement (not found): com.htlc.assetswap.mapper.WalletMapper.insert&#xff0c;并且select * 进行查询时带下划线的字段未成功映射。 排查&#xff1a; 1.检查WalletMapper接口&#xff0c;确保继承自BaseMapper 2.启用驼峰命名法映射。a…...

poi模板动态导出,下拉框联动,公式设置

背景&#xff1a;有一个动态导出模板的需求&#xff0c;根据页面维护的数据比如模板名称&#xff0c;模板的sheet名称&#xff0c;列名称宽度高度等&#xff0c;导出excel文件。打破以往把excel上传到代码的resource中&#xff0c;或者文件服务中&#xff0c;再下载出来导入。这…...

string的实际应用 -- 大数相加 、大数相乘

前言&#xff1a;哎&#xff0c;做题好难o(╥﹏╥)o&#xff0c;有时候想不到&#xff0c;而有时候则是想到了却没办法理清思路&#xff0c;转化为代码。有必要反思了┓(;_&#xff40;)┏&#xff0c;是否是做的太少了&#xff0c;或是自己的基础欠缺。 大学总是有些迷茫~ ​​…...

16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗

使用外部触发启动ADC 1、外部中断线EXTI11触发ADC2、外部定时器TIM2_CH2触发ADC3、ADC中模拟看门狗的使用 1、外部中断线EXTI11触发ADC ADC的触发方式有很多&#xff0c;一般情况都是使用软件触发反式启动ADC转换。除了软件触发方式还能使用外部事件触发启动ADC转换。如下图所…...

前端框架 react 性能优化

目录 一、不使用任何性能优化API进行优化 二、通过性能优化API优化 1、React.memo 2、useCallback 3、useMemo 4、PureComponent 三、总结​ 总览&#xff1a;react的优化核心思想就是让react跳过重新渲染那个些没有改变的Component&#xff0c;而只重新渲染发生变化的C…...

一加ACE 3 Pro手机无法连接电脑传输文件问题

先说结论&#xff1a;OnePlus手机无法连接电脑传输数据的原因&#xff0c;大概率是一加数据线的问题。尝试其他手机品牌的数据线&#xff08;比如华为&#xff09;&#xff0c;再次尝试。 连接电脑方法&#xff1a; 1 打开开发者模式&#xff08;非必要操作&#xff09; 进入…...

✅ Qt流式布局

Qt流式布局 前段时间&#xff0c;曾经对某个软件的一个“流式布局”有点感兴趣&#xff0c;什么叫“流式布局”呢&#xff1f;请看下图: 简而言之&#xff0c;流式布局就是布局应能够根据界面尺寸的变化自动调整其内部控件的位置。然而&#xff0c;Qt 提供的标准布局&#xff…...

【微服务】RabbitMQ与SpringAMQP消息队列

一、初识MQ 1. 同步通讯 同步通讯就好比双方打电话&#xff0c;可以实时响应&#xff0c;但只能一对一&#xff0c;只能同时和一个人聊天。 异步通讯就好比两个人发信息&#xff0c;你发信息给对方&#xff0c;对方不一定给你回复&#xff0c;但是可以一对多&#xff0c;可…...

C++设计模式-中介者模式

动机(Motivation) 多个对象相互关联的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。在这种情况下&#xff0c;可以使用一种”中介对象“来管理对象间的关联关系&#xff0c;避免…...

js实现分页效果

分页总结&#xff1a; 先写好html格式和css样式 再写js时先将他们都获取过来&#xff0c;设置一个k为页数的下标&#xff0c;num为每页的数据数量&#xff0c;pages为页数&#xff0c;并且获取json数据&#xff0c;再将data获取到全局 写for循环&#xff0c;设置一个变量为i…...

【WRF-Urban】多层建筑能源参数化模型概述:原理

【WRF-Urban】多层建筑能源参数化模型概述&#xff1a;原理 1 概述1.1 原理1.2 使用步骤 2参考 多层建筑能源参数化&#xff08;Multi-layer Building Energy Parameterization, BEP&#xff09;模型是一种用于模拟城市环境中多层建筑群的能量交换和微气候影响的参数化模型。该…...

ShuffleNet V2:高效卷积神经网络架构设计的实用指南

摘要 https://arxiv.org/pdf/1807.11164 当前&#xff0c;神经网络架构设计大多以计算复杂度的间接指标&#xff0c;即浮点运算数&#xff08;FLOPs&#xff09;为指导。然而&#xff0c;直接指标&#xff08;例如速度&#xff09;还取决于其他因素&#xff0c;如内存访问成本…...

1123--collection接口,list接口,set接口

目录 一 java 1. 集合 2. 集合框架图--remember 3. collection接口 3.1 collection接口的常用方法 3.1.1 add&#xff08;&#xff09; 3.1.2 remove&#xff08;&#xff09;-返回删除后的对象 3.1.3 contains&#xff08;&#xff09;--返回布尔值 3.1.4 size&…...

基于BindingList的WinForm数据绑定机制与DataGridView动态刷新技术

前言&#xff1a; 本文以连接SQLite为例进行代码演示 一、首先建立里一个模型类 public class MyData{public int id { get; set; }public string name { get; set; }public int age { get; set; }public string sex { get; set; }public string address { get; set; }} 二、…...

大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

对于相对速度的重新理解 - 插一句

因为发了太多的公式&#xff0c;系统提示插入图片太频繁&#xff0c;下一个部分稍后再写。 这里要强调一下&#xff1a; 狭义相对论的平方和形式&#xff0c;其实就是因为分不清虚数单位的大小才写成这个样子。或者用物理语言来说&#xff0c;就是认为所有惯性系的“光速”都…...

css基础(27)_行内、行内块元素之间的空白问题

行内、行内块元素之间的空白问题 产生的原因&#xff1a;行内元素、行内块元素&#xff0c;彼此之间的换行会被浏览器解析为一个空白字符。 案例一&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8">&…...

如果接口返回值图片有很长一串码,需要添加前缀

需要在前面添加前缀&#xff1a;data:image/jpeg;base64,然后将值赋值给<img :src"originalImage" /> this.tableLists.map((item)>{item.originalImage "data:image/jpeg;base64,"item.originalImage})以上方法会导致出现一个小bug&#xff0c;…...

《AI大模型开发笔记》——ollama应用全面解析

入门篇 1 ollama是什么? Ollama 是一个支持在本地运行大语言模型的工具,兼容 Windows、Linux 和 MacOS 操作系统。使用 Ollama,您仅需一行命令即可启动模型。 2 如何安装? Windows和MacOS用户,从下面链接下载安装即可: 下载地址:https://ollama.com/download Linux系…...

Paddle Inference部署推理(三)

三&#xff1a;Paddle Inference推理 导出模型 Paddle Inference支持使用飞桨静态图模型进行推理&#xff0c;您可以通过以下两种方式获取静态图模型&#xff1a; &#xff08;1&#xff09;飞桨框架导出推理模型 飞桨框架在训练模型过程中&#xff0c;会在本地存储最终训练…...

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes

CSP/信奥赛C语法基础刷题训练&#xff08;23&#xff09;&#xff1a;洛谷P1217&#xff1a;[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数&#xff08;从左到右和从右到左是看一样的&#xff09;&#xff0c;所以 151 151 …...

《跨越语言壁垒:Python 人工智能原型到 C++可执行程序的转型之路》

在人工智能的广阔天地里&#xff0c;Python 以其简洁易用和丰富的库资源成为众多开发者快速搭建人工智能原型的首选语言。然而&#xff0c;在一些对性能和资源控制要求极高的场景下&#xff0c;C则展现出无可比拟的优势。那么&#xff0c;如何将 Python 中开发的人工智能原型代…...

flowable流程图详细绘制教程

文章目录 前言一、flowable是什么&#xff1f;回答下之前的问题 二、flowable-modeler使用1. 使用步骤2.开始绘制弄一个请假的流程 三 加载该流程总结 前言 flowable有些晦涩难懂的东西&#xff1a; 我最开始接触的时候,还是用的activity,当时觉得好复杂,那么这次经过我自己在…...

Figma入门-基本操作制作登录页

Figma入门-基本操作制作登录页 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的&am…...

在windows操作系统上,用git与github账户连接

一、环境准备 1.1 git软件 1.2 github账号 1.3 创建一个项目目录&#xff0c;比如 D:\project\gitproject 二、开始操作 1. 进入项目目录下&#xff0c;右键&#xff0c;如图&#xff0c;打开git bash命令行 2. 在命令行输入以下三个命令 $ git config --global user.name &quo…...

springboot系列--拦截器执行原理

一、拦截器核心概念 一、定义 拦截器&#xff08;Interceptor&#xff09;是框架级别的组件&#xff0c;用于在请求的不同阶段&#xff08;如到达控制器之前&#xff08;也就是接口&#xff09;、处理完成之后&#xff09;动态地拦截和处理 HTTP 请求。 二、使用场景 一、用户…...

数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图

目录 目录 一、绘制折线图 1.使用pyplot 2.使用numpy ​编辑 3.使用DataFrame ​编辑 二、绘制条形图&#xff08;柱状图&#xff09; 1.简单条形图 2.绘制叠加条形图 3.绘制并列条形图 4.水平条形图 ​编辑 三、绘制饼状图 四、绘制散点图和直方图 1.散点图 2…...

STM32F10x 定时器

使用定时器实现&#xff1a;B5 E5的开关 添加相关的.h路径文件 添加相关的.c配置文件 led.h文件 用于声明LED函数 #ifndef __LED_H //没有定义__LED_H #define __LED_H //就定义__LED_H #define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5) #defi…...

VBA技术资料MF230:展开所有折叠视图并恢复

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

【数据结构OJ】【图论】图综合练习--拓扑排序

题目描述 已知有向图&#xff0c;顶点从0开始编号&#xff0c;求它的求拓扑有序序列。 拓扑排序算法&#xff1a;给出有向图邻接矩阵 1.逐列扫描矩阵&#xff0c;找出入度为0且编号最小的顶点v 2.输出v&#xff0c;并标识v已访问 3.把矩阵第v行全清0 重复上述步骤&#xff0…...

网络安全防范

网络安全防范技术 所属课程网络攻防实践作业要求第六次作业 实践内容 学习总结 PDR&#xff0c;$$P^2$$DR安全模型。 防火墙&#xff08;Firewall&#xff09;&#xff1a; 网络访问控制机制&#xff0c;布置在网际间通信的唯一通道上。 不足&#xff1a;无法防护内部威胁&…...

Linux nc 命令详解

简介 nc 全称 netcat&#xff0c;是一个在 Linux 中多功能的网络工具&#xff0c;通常用于通过 TCP 或 UDP 读取和写入网络连接&#xff0c;也能作为客户端或服务端用来 debug&#xff0c;测试&#xff0c;网络问题分析。 常用示例 检查端口是否是打开的 nc -zv <hostna…...

解决 Gradle 报错:`Plugin with id ‘maven‘ not found` 在 SDK 开发中的问题

在 SDK 开发过程中&#xff0c;使用 Gradle 构建和发布 SDK 是常见的任务。在将 SDK 发布为 AAR 或 JAR 包时&#xff0c;你可能会使用 apply plugin: maven 来发布到本地或远程的 Maven 仓库。但是&#xff0c;随着 Gradle 版本的更新&#xff0c;特别是从 Gradle 7 版本开始&…...

stm32cubemx+VSCODE+GCC+makefile 开发环境搭建

title: stm32cubemxVSCODEGCCmakefile 开发环境搭建 tags: FreertosHalstm32cubeMx 文章目录 内容往期内容导航第一步准备环境vscode 插件插件配置点灯 内容 往期内容导航 第一步准备环境 STM32CubeMXVSCODEMinGWOpenOcdarm-none-eabi-gcc 然后把上面下载的软件 3 4 5 bin 文…...

postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)

一、 psycopg2简介 psycopg2库是python的一个可直接操作postgresql数据库的类库&#xff0c;是一个用于Python编程语言的PostgreSQL数据库适配器。它允许开发人员使用Python语言与PostgreSQL数据库进行交互和操作&#xff0c;不同于java&#xff0c;需要专用的一个驱动&#…...