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

Unity之一键创建自定义Package包

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity之一键创建自定义Package包
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 自定义Package 快速创建

为初学者节省宝贵的学习时间,避免困惑!


前言:

  在之前的文章从零开始创建Unity自定义包Package:一步一步实现您的功能,我已经详细的介绍了该如何一步一步的去创建自己的自定义Package包,但是我相信有的小伙伴还是觉得文章很长不想看,或者觉得创建一个自定义包很麻烦,又要创建包,又要导入包的。

  今天小伙伴们可以轻松的去做这件事了,你可以直接一键的去生成包和导入包到Unity,真正的做到了省心、省时、省力,接下来就让我们一起来看怎么实现的吧。

TechX 教程效果:

在这里插入图片描述


文章目录

  • 一、绘制package创建器面板
  • 二、创建包
    • 1、创建文件夹和Assembly Definition
    • 2、创建包清单文件 (package.json)
    • 3、创建CHANGELOG.md
    • 4、创建README.md
  • 三、安装包
  • 四、项目地址


一、绘制package创建器面板


创建器面板的绘制基本上是package.json文件中的内容,包含大多数的包清单中的内容,包含:包名,包版本,包展示名,包描述,Unity版本,Unity发布版本号,文档地址,改变日志地址,证书地址,依赖列表,关键词列表,作者信息,案例列表等。

其中还包含了创建包时的选项,包含是否创建Scripts文件夹,是否创建Tests文件夹,是否创建CHANGELOG文件,是否创建ReadMe文件。

public class PackageCreatorWindow : EditorWindow
{private bool isCreteScriptsFolder = true;private bool isCreteTestsFolder = false;private bool isCreateChangeLog = true;private bool isCreateReadme = true;private string packageName = "";private string version = "";private string displayName = "";private string description = "";private string unity = "";private string unityRelease = "";private string documentationUrl = "";private string changelogUrl = "";private string licensesUrl = "";private List<Dependency> dependencies = new List<Dependency>();private List<string> keywords = new List<string>();private Author author = new Author();private List<Sample> samples = new List<Sample>();private ReorderableList keywordsReorderableList;private ReorderableList samplesReorderableList;private ReorderableList dependenciesReorderableList;private void OnGUI(){DrawGUI();}private void DrawGUI(){GUILayout.Space(5f);GUILayout.Label("Package Config", new GUIStyle { fontSize = 20, padding = new RectOffset() { left = 5 }, fontStyle = FontStyle.Bold, normal = { textColor = Color.white } }); ;GUILayout.Space(5f);scrollPos = EditorGUILayout.BeginScrollView(scrollPos,EditorStyles.helpBox);isCreteScriptsFolder = EditorGUILayout.ToggleLeft("Is Crete Scripts Folder", isCreteScriptsFolder);isCreteTestsFolder = EditorGUILayout.ToggleLeft("Is Crete Tests Folder", isCreteTestsFolder);isCreateChangeLog = EditorGUILayout.ToggleLeft("Is Create ChangeLog File", isCreateChangeLog);isCreateReadme = EditorGUILayout.ToggleLeft("Is Create ReadMe File", isCreateReadme);packageName = EditorGUILayout.TextField("Package Name *", packageName);version = EditorGUILayout.TextField("Version *", version);displayName = EditorGUILayout.TextField("Display Name *", displayName);description = EditorGUILayout.TextArea(description, GUILayout.Height(50));unity = EditorGUILayout.TextField("Unity Version *", unity);unityRelease = EditorGUILayout.TextField("Unity Release *", unityRelease);documentationUrl = EditorGUILayout.TextField("Documentation URL", documentationUrl);changelogUrl = EditorGUILayout.TextField("Changelog URL", changelogUrl);licensesUrl = EditorGUILayout.TextField("Licenses URL", licensesUrl);dependenciesReorderableList.DoLayoutList();keywordsReorderableList.DoLayoutList();autorToogleGroup = EditorGUILayout.BeginFoldoutHeaderGroup(autorToogleGroup, "Author");if (autorToogleGroup){EditorGUI.indentLevel += 1;author.name = EditorGUILayout.TextField("Name", author.name);author.email = EditorGUILayout.TextField("Email", author.email);author.url = EditorGUILayout.TextField("Url", author.url);EditorGUI.indentLevel -= 1;}EditorGUILayout.EndFoldoutHeaderGroup();samplesReorderableList.DoLayoutList();EditorGUILayout.EndScrollView();//创建之前要验证面板信息if (GUILayout.Button("Create Package")){string selectPath = EditorUtility.OpenFolderPanel("Select Folder for New Package", "", "");bool isSuccess = CreateNewPackage(selectPath, packageName, out string packagePath);if (isSuccess == false) return;InstallPackage(selectPath, packagePath);}}
}


二、创建包


1、创建文件夹和Assembly Definition


为创建的包创建一些需要的文件夹,比如Scripts/Editor、Scripts/Runtime、Tests/Editor、Tests/Runtime文件夹。
Scripts/Editor文件夹包含编辑器使用的功能,放置的脚本只在编辑器环境中使用。
Scripts/Runtime文件夹包含游戏运行时使用的功能,放置的脚本将在游戏运行时执行。
Tests/Editor用于编辑器测试,Tests/Runtime用于运行时测试。

/// <summary>
/// 创建包文件夹
/// </summary>
private void CreatePackageFolder(string pacakgePath, string packageName)
{//TODO 创建Scripts文件夹。。。。string scriptsFolderPath = Path.Combine(pacakgePath, "Scripts");Directory.CreateDirectory(scriptsFolderPath);//创建Editor和Runtime文件夹string editorFolderPath = Path.Combine(scriptsFolderPath, "Editor");string runtimeFolderPath = Path.Combine(scriptsFolderPath, "Runtime");Directory.CreateDirectory(editorFolderPath);Directory.CreateDirectory(runtimeFolderPath);// Create .asmdef files//这里的asmdef的文件的包名是否首字母大写??string editorAsmdefPath = Path.Combine(editorFolderPath, $"{packageName}.Editor.asmdef");string runtimeAsmdefPath = Path.Combine(runtimeFolderPath, $"{packageName}.Runtime.asmdef");AsmdefConfigProcess.CreateAsmdefContent(editorAsmdefPath, true);AsmdefConfigProcess.CreateAsmdefContent(runtimeAsmdefPath, false);//TODO 创建Tests文件夹。。。。string testsFolderPath = Path.Combine(pacakgePath, "Tests");Directory.CreateDirectory(testsFolderPath);string testseEditorFolderPath = Path.Combine(testsFolderPath, "Editor");string testseRuntimeFolderPath = Path.Combine(testsFolderPath, "Runtime");Directory.CreateDirectory(testseEditorFolderPath);Directory.CreateDirectory(testseRuntimeFolderPath);string testseEditorAsmdefPath = Path.Combine(testseEditorFolderPath, $"{packageName}.Editor.Tests.asmdef");string testseRuntimeAsmdefPath = Path.Combine(testseRuntimeFolderPath, $"{packageName}.Runtime.Tests.asmdef");AsmdefConfigProcess.CreateAsmdefContent(testseEditorAsmdefPath, true);AsmdefConfigProcess.CreateAsmdefContent(testseRuntimeAsmdefPath, false);
}

在每个文件夹创建完成之后,我们都需要在文件夹中定义一个程序集文件,注意在不同的文件夹中,程序集文件的名称是不一样的,同时也要注意,对于运行时和编辑器下的程序集平台也是不一样的,运行时的平台一般是Any Platform,而编辑器的平台是Editor。

public class AsmdefConfig
{public string name;public string rootNamespace;public List<string> references;public List<string> includePlatforms;public List<string> excludePlatforms;public bool allowUnsafeCode;public bool overrideReferences;public List<string> precompiledReferences;public bool autoReferenced;public List<string> defineConstraints;public List<string> versionDefines;public bool noEngineReferences;
}public class AsmdefConfigProcess
{/// <summary>/// 创建.asmdef/// </summary>/// <param name="path">创建的位置</param>/// <param name="isEditor">适用于运行时还是编辑器下</param>public static void CreateAsmdefContent(string filePath, bool isEditor){string fileName = Path.GetFileNameWithoutExtension(filePath) ;AsmdefConfig asmdefClass = new AsmdefConfig();asmdefClass.name = fileName;asmdefClass.rootNamespace = "";asmdefClass.references = new List<string>();asmdefClass.includePlatforms = isEditor ? new List<string> { "Editor" } : new List<string>();asmdefClass.excludePlatforms = new List<string>();asmdefClass.allowUnsafeCode = false;asmdefClass.overrideReferences = false;asmdefClass.precompiledReferences = new List<string>();asmdefClass.autoReferenced = true;asmdefClass.defineConstraints = new List<string>();asmdefClass.versionDefines = new List<string>();asmdefClass.noEngineReferences = false;JObject asmdefJson = JObject.FromObject(asmdefClass);File.WriteAllText(filePath, asmdefJson.ToString());}
}

2、创建包清单文件 (package.json)


每个Unity Package都必须包含一个名为package.json的清单文件。这个文件包含了有关包的元信息,如名称、版本、依赖项等。

/// <summary>
/// 创建package.json文件
/// </summary>
private void CreatePackageFile(string pacakgePath)
{// Create package.jsonPackageConfigProcess.CreatePackageJson(pacakgePath, GetPackageJsonContent());
}

这里定义了包清单的一些相关类型,当需要创建package.json文件时,从面板上获取到包相关信息,并生成PackageConfig实例,将该实例转换成JSON字符串写入到json文件中。

[System.Serializable]
public class Author
{public string name = "";public string email = "";public string url = "";
}[System.Serializable]
public class Dependency
{ public string packageName;public string version;
}[System.Serializable]
public class Sample
{public string displayName;public string description;public string path;
}public class PackageConfig
{public string name = "";public string version = "";public string displayName = "";public string description = "";public string unity = "";public string unityRelease = "";public string documentationUrl = "";public string changelogUrl = "";public string licensesUrl = "";public JObject dependencies = new JObject();public List<string> keywords = new List<string>();public Author author = new Author();public List<Sample> samples = new List<Sample>();
}public class PackageConfigProcess
{public static void CreatePackageJson(string path, PackageConfig packageConfig){JObject packageConfigJson = JObject.FromObject(packageConfig);string fullPath = Path.Combine(path, $"package.json");File.WriteAllText(fullPath, packageConfigJson.ToString());}
}

3、创建CHANGELOG.md


CHANGELOG.md文件是版本信息改变的日志文件,建议在每次发布新版本时更新CHANGELOG.md文件。在文件中记录新增功能、改进和错误修复。

/// <summary>
/// 创建CHANGELOG.md文件
/// </summary>
private void CreateChangeLogFile(string pacakgePath)
{// Create CHANGELOG.mdstring changeLogPath = Path.Combine(pacakgePath, "CHANGELOG.md");File.WriteAllText(changeLogPath, "# Changelog\nAll notable changes to this package will be documented in this file.\n\n");
}

4、创建README.md


README.md文件是关于该插件的介绍和如何使用的。

/// <summary>
/// 创建README.md文件
/// </summary>
private void CreateReadMeFile(string pacakgePath)
{// Create README.mdstring readmePath = Path.Combine(pacakgePath, "README.md");File.WriteAllText(readmePath, $"# {Path.GetFileName(pacakgePath)}\n\n");
}


三、安装包


在包创建完成后,会把包创建到本地的某个文件夹中,但是这个时候并没有把包安装到Unity中,按照一般的方法,在创建完成包后,可以通过Package Manager中的Add package form disk选项去文件夹中选择包的package.json文件来安装本地包。

但是在这里我们在创建完成包后,直接根据包的路径来,直接使用代码来模拟Add package form disk选择package.json文件来安装包。

注意:当我们把包直接创建到工程的Packages文件中时,那么我们就不需要通过代码来添加包到工程中,因为Unity会自动完成这一步。

/// <summary>
/// 安装包
/// </summary>
/// <param name="creteResult"></param>
/// <param name="selectPath"></param>
/// <param name="packagePath"></param>
private void InstallPackage(string selectPath, string packagePath)
{//如果直接创建到了Packages文件加中,那么就不需要手动添加到工程中,Unity会自动添加if (File.Exists(Path.Combine(selectPath, "manifest.json"))) return;//TODO 添加包到工程中PackageInstaller.InstallPackageFromDisk(packagePath);
}

从本地安装包的方式有两种,一种是从文件夹安装,要求包含package.json文件,并且符合包清单的条件,一种是通过.tgz压缩包的方式安装包。

这两种包在安装时都需要在路径前"file:"才能正确的安装包。

public class PackageInstaller
{/// <summary>/// 从本地路径安装包/// 1、可以通过本地文件夹安装包,格式file:pathtopackagefolder,如file:E:/UPMProject/UPM/com.fxb.test/// 2、从.tgz文件安装包,格式file:pathtopackage.tgz,如file:E:/UPMProject/UPM/com.fxb.test.tgz/// </summary>/// <param name="packagePath"></param>public static void InstallPackageFromDisk(string packagePath){//从本地文件夹安装包if (Directory.Exists(packagePath)){// 构造package.json文件的完整路径string packageJsonPath = Path.Combine(packagePath, "package.json");// 检查package.json文件是否存在if (!File.Exists(packageJsonPath)){Debug.LogError("The provided folder does not contain a valid 'package.json' file and is not a valid Unity package.");return;}}//从.tgz文件安装包else if (File.Exists(packagePath)){if (!packagePath.EndsWith(".tgz")){Debug.LogError($"{packagePath} file is not a valid Unity package.");return;}}else{Debug.LogError($"The package at path {packagePath} does not exist.");return;}// 构建正确的标识符string identifier = $"file:{packagePath}";// 如果存在package.json,那么这是一个有效的包,可以继续安装AddRequest request = Client.Add(identifier);CallbackFunction onAddUpdate = null;onAddUpdate = () =>{if (request.IsCompleted){if (request.Status == StatusCode.Success)Debug.Log($"Package from {packagePath} installed successfully.");elseDebug.LogError($"Failed to install package from {packagePath}: {request.Error.message}");// 移除更新回调EditorApplication.update -= onAddUpdate;}};// 注册更新事件EditorApplication.update += onAddUpdate;}
}


四、项目地址


以下是项目地址,已经整理成了Package包,有需要的小伙伴门可以自取:

https://gitcode.com/CTLittleNewbie/com.fxb.unitypackagecreator_v1.0.0/overview





TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步


END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

相关文章:

Unity之一键创建自定义Package包

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之一键创建自定义Package包 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01; …...

【AI】JetsonNano启动时报错:soctherm OC ALARM

1、问题描述 将JetsonNano烧写SD卡镜像为Ubuntu20.04后&#xff0c;启动时报错&#xff1a;soctherm OC ALARM&#xff0c;启动失败&#xff1b;然后系统一直重启 2、原因分析 “soctherm OC ALARM”是检测到系统温度超过安全阈值时发出的过热警告。 “soctherm”代表系统…...

道路机器人识别交通灯,马路,左右转,黄线,人行道,机器人等路面导航标志识别-使用YOLO标记

数据集分割 train组66% 268图片 validation集22% 91图片 test集12&#xff05; 48图片 预处理 没有采用任何预处理步骤。 增强 未应用任何增强。 数据集图片&#xff1a; 交通灯 马路 右转 向右掉头 机器人识别 人行横道 黄线 直行或右转 数据集下载&#xff1a; 道路…...

电子应用设计方案-31:智能AI音响系统方案设计

智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备&#xff0c;通过融合语音识别、自然语言处理、音频播放等技术&#xff0c;为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…...

SQL优化与性能——数据库设计优化

数据库设计优化是提高数据库性能、确保数据一致性和支持业务增长的关键环节。无论是大型企业应用还是小型项目&#xff0c;合理的数据库设计都能够显著提升系统性能、减少冗余数据、优化查询响应时间&#xff0c;并降低维护成本。本章将深入探讨数据库设计中的几个关键技术要点…...

脑网络组织与心跳动力学之间的耦合测量

摘要 近年来&#xff0c;人们对脑心相互作用的研究兴趣日益浓厚。许多研究提出了新的方法来探究大脑与心脏如何通信&#xff0c;从而对一些神经功能有了新的认识。然而&#xff0c;大多数框架只关注单个脑区域与心跳动态之间的相互作用&#xff0c;忽略了大脑的功能网络会随着…...

图像显示的是矩阵的行和列,修改为坐标范围。

x 3; y 3; f1x x^2 y^2; guance1 f1x; F (x, y) sqrt((x.^2 y.^2 - guance1).^2); % 使用点乘 [x, y] meshgrid(0:1:5, 0:1:5); Z F(x, y); figure; imagesc(Z); % 由于 imagesc 使用矩阵索引作为坐标&#xff0c;我们需要手动添加刻度 % 这里我们假设 x 和 y 的范围…...

一体化数据安全平台uDSP 入选【年度创新安全产品 TOP10】榜单

近日&#xff0c;由 FreeBuf 主办的 FCIS 2024 网络安全创新大会在上海隆重举行。大会现场揭晓了第十届 WitAwards 中国网络安全行业年度评选获奖名单&#xff0c;该评选自 2015 年举办以来一直饱受赞誉&#xff0c;备受关注&#xff0c;评选旨在以最专业的角度和最公正的态度&…...

[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue大景区订票(购票)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…...

力扣215:数组中第K大的元素

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,6,4],k 2 …...

永久停用PostgreSQL 归档功能

文章目录 引言永久停用归档功能归档的优势归档的劣势开启归档的情况关闭归档的情况see also引言 PostgreSQL 是一个开源的关系型数据库系统,支持数据归档(WAL),可以实现数据备份、恢复和灾难恢复等功能。在使用 PostgreSQL 的过程中,如果 PostgreSQL 数据库开启了归档(a…...

23种设计模式-原型(Prototype)设计模式

文章目录 一.什么是原型设计模式&#xff1f;二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图&#xff1a; 原型设计模式类图 一.什么是原型设计模式&#xff1f; 原型模式&#xff08;Prototype…...

【Linux】-学习笔记06

第二章、时间同步服务器 2.1时间同步服务器的使用 2.1.1系统时区时间的管理 timedatectl set-time "2024-02-13 10:41:55" ##设定系统时间 timedatectl list-timezones ##显示系统的所有时区 timedatectl set-timezone "Asia/Shangh…...

李永平:以科技创新为引擎,驱动中国国际未来产业研究院不断前行

作者:李望 在科技创新与产业升级的滚滚洪流中,唯有洞察未来者,方能引领时代浪潮。近日,中国国际未来产业研究院迎来了重量级嘉宾——李永平院士。他的加盟,为研究院注入了全新的活力。作为业界的领军人物,李永平院士将担任研究院常务副院长、资深专家及高级法律顾问,共同规划未…...

netconf 代码架构

NETCONF&#xff08;Network Configuration Protocol&#xff09;是一种基于 XML 的网络配置管理协议&#xff0c;主要用于在网络设备之间进行配置管理、状态监控和操作。它被设计为一种可扩展的协议&#xff0c;并且在自动化网络管理中扮演着重要角色。NETCONF 通过安全的通信…...

【查询目录】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

广域网技术

企业需要通过广域网将这些分散在不同地理位置的分支机构连接起来 早期广域网技术概述 广域网&#xff1a;连接不同地区局域网的网络&#xff0c;能够横跨几个洲提供远距离通信&#xff0c;形成国际性的远程网络 广域网设备角色介绍&#xff1a; CE&#xff1a;用户端连接服务…...

基于Java Springboot 求职招聘平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue2、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&…...

C学习:移位幻影之左移一个负数,会发生什么?

C学习&#xff1a;移位幻影之左移一个负数&#xff0c;会发生什么&#xff1f; 问题背景无符号数移位问题有符号数移位操作使低位置零问题 问题背景 C语言中&#xff0c;移位是个简单的问题&#xff0c;但又是个高风险的问题。 简单在于&#xff0c;大部分场景都可以理解为乘或…...

[2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(2))

方法一&#xff08;string&#xff09;&#xff1a; #include <iostream> #include <string> using namespace std;// 检查是否为回文数 bool isPalindrome(int n) {string str to_string(n);int left 0, right str.size() - 1;while (left < right) {if (s…...

加载语言包的方式

推荐方式&#xff1a;使用 JSON 或 XML 文件结合解析库 JSON&#xff1a; 优点&#xff1a;轻量级&#xff0c;结构清晰&#xff0c;解析库&#xff08;如 nlohmann/json&#xff09;易用。示例内容&#xff1a; json 复制代码 { "en": { "greeting": &qu…...

深入了解 Adam 优化器对显存的需求:以 LLaMA-2 7B 模型为例 (中英双语)

中文版 深入了解 Adam 优化器对显存的额外需求&#xff1a;模型参数与优化器状态的显存开销分析 在深度学习模型的训练过程中&#xff0c;显存是一个关键的资源&#xff0c;尤其在处理大型语言模型或深度神经网络时。训练时的显存需求不仅包括模型参数本身&#xff0c;还涉及…...

深入理解CSS语法:掌握Web开发的基石

深入理解CSS语法&#xff1a;掌握Web开发的基石 在构建现代网页的过程中&#xff0c;层叠样式表&#xff08;CSS&#xff09;扮演着至关重要的角色。它不仅负责定义HTML元素的视觉表现&#xff0c;还极大地增强了Web内容的可访问性和用户体验。本文将深入探讨CSS的语法、书写位…...

基于python爬虫的智慧人才数据分析系统

废话不多说&#xff0c;先看效果图 更多效果图可私信我获取 源码分享 import os import sysdef main():"""Run administrative tasks."""os.environ.setdefault(DJANGO_SETTINGS_MODULE, 智慧人才数据分析系统.settings)try:from django.core.m…...

创建maven私人创库nexus

1.到官网下载nexus-3.74.0-05-unix.tar.gz包&#xff0c;若下载慢可以去这里下载地址 2.上传到liunx的根目录opt文件中&#xff0c;然后解压命令&#xff1a; tar -xzf nexus-3.74.0-05-unix.tar.gz 3.解压后会得到两个文件夹nexus-3.74.0-05 和 sonatype-work &#xff0c;…...

眼部按摩仪WT2605音频蓝牙语音芯片方案 单芯片实现语音提示及控制/手机无线音频传输功能

随着科技的快速发展&#xff0c;人们的生活方式也在不断改变&#xff0c;智能化、便捷化的产品逐渐成为市场的主流。眼部按摩仪作为一种结合了现代科技与健康生活理念的产品&#xff0c;受到了广大消费者的青睐。而在众多眼部按摩仪中&#xff0c;采用WT2605音频蓝牙芯片的方案…...

【面试题】2025年百度校招Java后端面试题

文章目录 前言一、网络IO1、服务器处理并发请求有哪几种方式&#xff1f;2、说一下select&#xff0c;poll&#xff0c;epoll的区别&#xff1f;3、Java 有一种现代的处理方式&#xff0c;属于异步I/O&#xff0c;是什么&#xff1f;redis&#xff0c;nginx&#xff0c;netty 是…...

Java面向对象. 多态

目录 java多态是什么东西&#xff1f;首先要理解什么是多态 Java多态指同一行为具有多个不同表现形式。如父类引用指向子类对象&#xff0c;调用重写方法时呈现不同结果。 1.多态的概念 一、多态的基本概念 二、多态的实现方式 接口实现 三、多态的好处 提高代码的可扩展…...

Vue 项目中有哪些内存泄漏的场景,以及预防内存泄漏技巧

前言 即便是功能强大的 Vue.js 也无法完全避免内存泄漏的问题&#xff0c;内存泄漏不仅会影响应用的性能&#xff0c;还可能导致浏览器崩溃。因此&#xff0c;识别和解决 Vue 项目中的内存泄漏问题是确保项目稳定性和性能的关键。 本文将通俗易懂地介绍 Vue 项目中常见的内存泄…...

MySQL Inception工具

MySQL Inception是一个强大的数据库变更管理和审计工具&#xff0c;主要用于审核、执行、备份以及回滚数据库操作。它的工作模式和MySQL完全相同&#xff0c;可以直接使用MySQL客户端来连接&#xff0c;但不需要验证权限。Inception相对于应用程序&#xff08;上层审核流程系统…...

Linux(Centos7)---安装nginx(很简单)

安装 sudo yum install nginx -y开机启动与开启服务 sudo systemctl enable nginx sudo systemctl start nginx...

多数元素

多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff…...

vim编辑器的一些配置和快捷键

记录vim编辑器的一些配置和快捷键&#xff0c;边学边用&#xff1a; yy 复制dd 删除p&#xff1a;粘贴ctrly 取消撤销u&#xff1a;撤销:w 写入:q 退出a/i 插入O: 上方插入一个空行o&#xff1a;下方插入一个空行:e 打开文件编辑 其他配置&#xff1a; 上移一行和下移一行&a…...

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发&#xff0c;开发自己的软件&#xff0c;例如&#xff1a;【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等&#xff0c;不管是您用来个人学习还是公司研发需求&#xff0c;都相当合适&#xff0c;包您满…...

14 —— Webpack解析别名

import {checkPhone, checkCode} from ../src/utils/check.js 这么使用相对路径不安全 —— 在webpack.config.js中配置解析别名来代表src绝对路径...

《C++ Primer Plus》学习笔记|第8章 函数探幽 (24-11-30更新)

文章目录 8.1 内联函数8.2 引用变量8.2.1 创建引用变量8.2.2 将引用用作函数参数8.2.3 引用的属性和特别之处特点1&#xff1a;在计算过程中&#xff0c;传入的形参的值也被改变了。特点2&#xff1a;使用引用的函数参数只接受变量&#xff0c;而不接受变量与数值的运算左值引用…...

vscode的项目给gitlab上传

目录 一.创建gitlab帐号 二.在gitlab创建项目仓库 三.Windows电脑安装Git 四.vscode项目git上传 一.创建gitlab帐号 二.在gitlab创建项目仓库 图来自:Git-Gitlab中如何创建项目、创建Repository、以及如何删除项目_gitlab新建项目-CSDN博客&#xff09; 三.Windows电脑安…...

【JVM什么时候触发YoungGC和FullGC】

YoungGC 年轻代Eden区满&#xff0c;就会触发YoungGC FullGC 老年代空间不足 经过多次GC后的大年龄对象会被放进老年代&#xff0c;或创建的大对象会直接在老年代分配&#xff0c;此时若老年代空间不足&#xff0c;就会触发FullGC。空间分配担保失败 触发YoungGC的时候会进行…...

Mybatis-批量删除用户

目录 题目&#xff1a; 1、创建Maven项目&#xff0c;在pom.xml中添加相关依赖 2、创建db.properties配置数据库信息 3、在resources下创建mybatis-config.xml核心配置文件 易错点&#xff1a; 4、在java中创建User.java&#xff0c;在java/com/haust/pojo下 5、在java中…...

Python的秘密基地--[章节2]Python核心数据结构

第2章&#xff1a;Python核心数据结构 Python中的数据结构提供了强大的工具来存储和操作数据。理解这些数据结构是Python编程的基础。 2.1 列表&#xff08;List&#xff09; 2.1.1 什么是列表 列表是一种有序的可变序列&#xff0c;用于存储一组数据。它支持多种类型的数据…...

TYUT设计模式精华版

七大原则 单一职责原则 职责要单一不能将太多的职责放在一个类中 开闭原则 软件实体对扩展是开放的&#xff0c;但对修改是关闭的 里氏代换原则 一个可以接受基类对象的地方必然可以接受子类 依赖倒转原则 要针对抽象层编程&#xff0c;而不要针对具体类编程 接口隔离原则 …...

责任链模式

07-责任链模式 1 导读 1.1 定义 包含了一些命令对象和一系列处理对象。每个处理对象决定它能处理哪些命令对象&#xff0c;它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。 该模式还描述了往该处理链的末尾添加新的处理对象的方法。 精简定义&#xff1a;为…...

2024.11.29(单链表)

思维导图 声明文件 #ifndef __LINKLIST_H__ #define __LINKLIST_H__#include <myhead.h>typedef char datatype; //数据元素类型 //定义节点类型 typedef struct Node {union{int len; //头节点数据域datatype data; //普通节点数据域};struct Node *next; //指针域…...

用Python做数据分析环境搭建及工具使用(Jupyter)

目录 一、Anaconda下载、安装 二、Jupyter 打开 三、Jupyter 常用快捷键 3.1 创建控制台 3.2 命令行模式下的快捷键 3.3 运行模式下快捷键 3.4 代码模式和笔记模式 3.5 编写Python代码 一、Anaconda下载、安装 【最新最全】Anaconda安装python环境_anaconda配置python…...

洛谷P1443 马的遍历

简单的bfs 题目链接 P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 有一个 nm 的棋盘&#xff0c;在某个点(x,y) 上有一个马&#xff0c;要求你计算出马到达棋盘上任意一个点最少要走几步。 输入格式 输入只有一行四个整数&#xff0c;分别为 n…...

实现一个Vue自定义指令

在 Vue 中&#xff0c;自定义指令允许你为 DOM 元素添加特定的行为或功能。下面是一个实现 Vue 自定义指令的简单示例&#xff0c;展示了如何创建一个指令&#xff0c;使得元素在鼠标悬停时改变背景色。 1. 创建自定义指令 在 Vue 2.x 中&#xff0c;你可以在 Vue.directive …...

【已解决】git push需要输入用户名和密码问题

解决方法&#xff1a; 1&#xff09;查看使用的clone方式&#xff1a; git remote -v 2&#xff09;若为HTTPS&#xff0c;删除原clone方式: git remote rm origin 3&#xff09;添加新的clone方式&#xff1a; git remote add origin gitgithub.com:zludon/git_test.git …...

什么是内存对齐?为什么需要内存对齐?

1. 什么是内存对齐 内存对齐是指将数据存储在内存中时&#xff0c;按照一定的规则让数据排列在规定的地址上。具体来说&#xff0c;每个成员变量会按照其自身所占用的字节数对齐&#xff0c;内存首地址为对齐周期的倍数&#xff0c;而对齐周期指的是数据类型的大小。例如&…...

数据库操作、锁特性

1. DML、DDL和DQL是数据库操作语言的三种主要类型 1.1 DML&#xff08;Data Manipulation Language&#xff09;数据操纵语言 DML是用于检索、插入、更新和删除数据库中数据的SQL语句。 主要的DML语句包括&#xff1a; SELECT&#xff1a;用于查询数据库中的数据。 INSERT&a…...

xiaolin coding 图解网络笔记——TCP篇

1. TCP 头格式有哪些&#xff1f; 序列号&#xff1a;在建立连接时由计算机生成的随机数作为其初始值&#xff0c;通过 SYN 包传给接收端主机&#xff0c;每发送一次数据&#xff0c;就【累加】一次该【数据字节数】的大小。用来解决网络包乱序问题。 确认应答号&#xff1a;指…...