新闻详情

新闻详情

首页 / 资讯中心 / 详情

猕猴桃检测数据集VOC与YOLO双格式详解:解压校验训练避坑指南

发布时间:2026/10/2 2:41:34来源:尧图网络
猕猴桃检测数据集VOC与YOLO双格式详解:解压校验训练避坑指南
简介这是一份面向目标检测与深度学习实践者的猕猴桃检测数据集采用Pascal VOC与YOLO双格式标注可直接用于模型训练、评估与农业视觉场景验证。资源包共2000个文件主要包含VOC格式XML标注文件与YOLO格式TXT标注文件压缩为.7z格式整体大小约84.07MB。目前已有725人浏览学习。数据集由labelImg按矩形框规则人工标注类别统一为mihoutao猕猴桃累计标注框19278个标注文件与图像一一对应下载后无需额外格式转换即可接入主流目标检测框架。这份数据集能帮助农业智能化、果实分拣等项目的开发者快速获得高质量训练样本省去数据采集与标注环节从而专注模型调参与精度优化同时适合入门者了解数据标注流程也适合研究者用统一格式快速验证新算法特别说明数据集中仅提供准确且合理的标注不附带模型权重或精度保证用户可按需开展实验。1. 这个1838张的猕猴桃检测数据集VOC与YOLO双格式到底解决什么问题做目标检测的人最怕的不是模型训不好而是数据集的格式和自己用的框架对不上。这个“猕猴桃检测数据集VOCYOLO格式1838张1类别.7z”从标题就能看出它的定位一个专门给猕猴桃检测任务准备的、单类别、1838张图片、同时给了VOC和YOLO两种标注格式的压缩包。对于想快速验证YOLO训练流程、或者需要一份干净的单类别数据来跑通检测项目的人来说它省掉了最枯燥的“找数据、转格式、清标签”阶段。它的适用人群很明确刚接触YOLO的初学者、要做农产品分拣或果园计数验证的工程师、以及需要在本地快速测通一套目标检测训练代码的人。1类别意味着你不用纠结多类别权重均衡1838张图也足够把训练流程完整跑一遍还能观察过拟合和欠拟合的边界。不过拿到手之后不能直接开训解压、校验、格式转换这几步看着简单实际踩坑的人并不少后面每一条我都会拆开讲。2. 拿到7z压缩包后怎么解压与校验Linux与Windows下的落地路径2.1 7z安装与解压命令Linux一行、Windows右键不够用标题里带.7z后缀第一步自然是解压。很多人在Windows上直接右键用系统自带压缩工具解压结果提示“无法打开文件”其实是系统不支持7z格式必须装7-Zip或者用命令行工具。我一般建议直接用命令行因为后面校验文件、批量处理标签都要碰终端这次顺便把环境一起理顺。Linux下安装7z很简单Debian/Ubuntu系sudo apt update sudo apt install -y p7zip-full安装后解压命令是7z x 猕猴桃检测数据集VOCYOLO格式1838张1类别.7z注意这里x是保留目录结构完整解压如果你只想看压缩包内容不急着解压用7z l列出文件清单。解压到指定目录加-o参数但-o后面不要有空格7z x 数据集.7z -o/home/user/datasets/kiwiWindows下如果装了7-Zip可以在命令行里用C:\Program Files\7-Zip\7z.exe x 数据集.7z。右键菜单的解压方式在遇到中文文件名或者非UTF-8编码的压缩包时经常翻车出现乱码或者解压后文件名错乱这不是数据包的问题是解压工具的编码处理不同命令行反而更稳。还有一个高频场景是压缩包设置了密码。7z的密码加密有两种模式一种是仅头部加密一种是完全加密。仅头部加密时你还能看到文件列表输入密码才能解压完全加密时连文件名都看不见。如果你碰到“密码是正确的但一直报错”后面避坑章我会单独说这里先给一个Linux下带密码解压的标准写法7z x -p你的密码 数据集.7z密码不要直接写在命令行里可以用-p后面跟变量或者等它交互式提示输入避免shell历史记录泄露。解压完成后先别急着看图片先校验文件数。2.2 解压后先做三件事目录结构、图片数、标签格式确认解压完成不是结束而是数据校验的开始。我会按固定顺序做三件事每件事都对应一个常见翻车点。第一件看目录结构。VOC和YOLO双格式的数据集通常有两种组织方式一种是分两个根目录比如VOC/和YOLO/另一种是在同一个根目录下同时放Annotations/xml文件、labels/txt文件、JPEGImages/图片。先别管哪种你要确认的是图片、xml、txt三者是否一一对应。用一条命令统计数量find JPEGImages -type f -name *.jpg | wc -l find Annotations -type f -name *.xml | wc -l find labels -type f -name *.txt | wc -l1838张图那xml和txt也应该各是1838个。数量对不上时后面训练一定出问题。如果发现txt或xml比图片少大概率是某些图片没有标注或者是空标签文件被省略了。第二件随机抽几张图片打开看看确认图片尺寸和清晰度。目标检测数据集最怕的是图片方向旋转、部分图片模糊、或者同一个图被缩放过。我习惯用Python批量看尺寸分布import os from PIL import Image img_dir JPEGImages sizes set() for name in os.listdir(img_dir): with Image.open(os.path.join(img_dir, name)) as im: sizes.add(im.size) print(sizes)如果尺寸只有一种那说明原始数据做过统一处理如果尺寸很多后面训练时要注意YOLO会自动resize但极端的宽高比会导致目标形变必要时可以按长边resize而不是直接拉伸。第三件打开一个xml和对应的txt人工比对一下标注框的位置是不是差不多。这一步能立刻发现“xml是好的但txt是乱生成”的情况。cat Annotations/000001.xml cat labels/000001.txt一个合格的VOC xml里应该有object、name、bndbox这几个关键节点YOLO的txt一行是“类别编号 中心x 中心y 宽度 高度”。第一行类别编号是0单类别时必须写0不能写1。如果txt里出现了1后面的训练大概率类别数对不上这一条我记在避坑章里。3. 把VOC格式转成YOLO格式坐标换算脚本与四个边界坑3.1 VOC的xml标注是怎么描述一个猕猴桃的VOC格式用xml文件存标注信息一个典型的xml长这样annotation filenamekiwi_0001.jpg/filename size width1280/width height960/height depth3/depth /size object namekiwi/name bndbox xmin100/xmin ymin150/ymin xmax300/xmax ymax350/ymax /bndbox /object /annotation需要注意xmin、ymin、xmax、ymax是像素坐标左上角为原点x向右增加y向下增加。YOLO格式要求的是归一化坐标也就是所有数值除以图片的宽或高取值在0到1之间而且存的是“中心点坐标加宽高”不是左上角和右下角。这里有一个很常见的误解有人以为XML里已经有了宽度和高度直接宽度除以2就是中心点。不是的xml里给的是左上角和右下角中心点要自己算。3.2 从xml到txt归一化坐标转换脚本我一般用Python写一个一次性转换脚本输入是VOC的xml目录输出是YOLO的txt目录。下面的脚本能跑通大部分场景import os import xml.etree.ElementTree as ET def voc_to_yolo(xml_dir, out_dir, class_names): os.makedirs(out_dir, exist_okTrue) for xml_name in os.listdir(xml_dir): if not xml_name.endswith(.xml): continue xml_path os.path.join(xml_dir, xml_name) tree ET.parse(xml_path) root tree.getroot() # 读取图片尺寸 size root.find(size) width int(size.find(width).text) height int(size.find(height).text) # 生成同名txt txt_name xml_name.replace(.xml, .txt) lines [] for obj in root.iter(object): name obj.find(name).text if name not in class_names: continue # 只保留你关心的类别 cls_id class_names.index(name) box obj.find(bndbox) xmin float(box.find(xmin).text) ymin float(box.find(ymin).text) xmax float(box.find(xmax).text) ymax float(box.find(ymax).text) # 归一化并转中心坐标 x_center (xmin xmax) / 2.0 / width y_center (ymin ymax) / 2.0 / height w (xmax - xmin) / width h (ymax - ymin) / height # 防御一下越界 x_center min(max(x_center, 0.0), 1.0) y_center min(max(y_center, 0.0), 1.0) w min(w, 1.0) h min(h, 1.0) lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) with open(os.path.join(out_dir, txt_name), w) as f: f.write(\n.join(lines) \n) print(f转换完成输出目录{out_dir}) class_names [kiwi] # 按txt里你想用的类别顺序 voc_to_yolo(Annotations, labels_out, class_names)这段代码的逻辑有三处值得注意。第一class_names.index(name)决定了类别编号列表顺序就是txt里的编号顺序。单类别时只有kiwi那它的编号固定是0。第二坐标全部除以图片实际宽高不是除以某个固定尺寸这保证了不同分辨率的图片也能统一到0-1区间。第三加了越界防御因为有些标注框会稍微超出图片边界比如xmax画得比width大一点点不处理的话训练时YOLO会报警告。3.3 转换后必须做的三类自检转完不能直接用我每一次都要做三类自检每一类都能拦住一个坑。第一类检查文件名是否一一对应。VOC的图片文件叫kiwi_0001.jpg那xml叫kiwi_0001.xml转换出来的txt必须叫kiwi_0001.txt。用脚本比对一下import os img_dir JPEGImages txt_dir labels_out img_names {os.path.splitext(n)[0] for n in os.listdir(img_dir) if n.endswith(.jpg)} txt_names {os.path.splitext(n)[0] for n in os.listdir(txt_dir) if n.endswith(.txt)} print(缺txt的图片, img_names - txt_names) print(无图片的txt, txt_names - img_names)缺txt的图片训练时会被YOLO当成无目标图片导致一张图里没有正样本无图片的txt则会产生无效标签路径。这两类情况都要清掉。第二类检查txt内容有没有空文件。空文件代表图片里有物体但没标注或者标注被过滤掉了。训练时空标签会导致该图被当作背景图参与loss计算如果空文件数量很大模型的召回率会异常。find labels_out -type f -name *.txt -empty | wc -l如果有空文件最好回到原xml去确认是不是真的没有目标而不是转换过程出了问题。第三类可视化验证。把标注框画回图片上用OpenCV快速看一眼import cv2 img cv2.imread(JPEGImages/kiwi_0001.jpg) h, w img.shape[:2] with open(labels_out/kiwi_0001.txt) as f: for line in f: cls_id, xc, yc, bw, bh map(float, line.split()) x1 int((xc - bw / 2) * w) y1 int((yc - bh / 2) * h) x2 int((xc bw / 2) * w) y2 int((yc bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.imwrite(check.jpg, img)这一步能直观看到框有没有整体偏移、是不是有框明显错位比看数字更可靠。我见过不少数据集的txt坐标是拿错了参考图尺寸生成的画出来框全偏了如果直接训模型大概率学一个位置偏差。4. 用YOLO训练猕猴桃检测模型数据集yaml与训练参数的调法4.1 数据集yaml的写法路径、类别名、类别数不管用YOLOv5还是YOLOv8训练前都要一个数据集配置文件。这个文件是yaml格式里面写图片路径、验证集路径、类别名和类别数。目录结构我建议这样摆dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ ├── train.txt ├── val.txt └── data.yaml把1838张图按比例拆开常见做法是train占8成、val占2成也就是约1470比368。注意不是直接把整目录扔进去YOLO的train/val是图片目录它会在同名的labels目录下找对应txt。也就是说images/train/kiwi_0001.jpg对应labels/train/kiwi_0001.txt。这个对应关系是YOLO通过后缀替换实现的你的labels目录如果叫别的名字训练会直接报“label not found”。data.yaml的内容长这样path: /home/user/datasets/kiwi # 数据集根目录建议绝对路径 train: images/train val: images/val nc: 1 names: [kiwi]有三个坑在这里很常见。第一个是path用了相对路径导致在别的目录下启动训练时找不到图片。第二个是names里列表元素个数和nc不一致YOLO新版有的会自己算但最好显式写对。第三个是类别名单里的名字必须和VOC xml里的name一致如果你原数据集里的类别叫kiwifruit你这里就要写kiwifruit不能自己改成kiwi否则txt里的类别编号含义就变了。4.2 预训练模型选择与训练超参调整单类别1838张的数据量我强烈不建议从头训练。从头训练通常需要几十万张图片才能收敛到可用精度你这个量级很容易陷入过拟合或者loss降不下来。正确做法是下载YOLO官方预训练模型用它在大规模数据上学到的特征做迁移学习只微调最后几层检测头。YOLOv8的话常见用法是yolo detect train datadata.yaml modelyolov8s.pt epochs100 imgsz640 batch16这里modelyolov8s.pt会自动下载对应的预训练权重。如果你没有外网或者需要离线环境提前把预训练模型下载好放到本地路径然后改model/path/to/yolov8s.pt。选择s还是m还是l取决于你的显卡显存和推理速度要求。V100级别显卡跑yolov8s很轻松batch可以开大如果是笔记本上的低显存GPU建议yolov8n或者yolov8s并把batch降到8。预训练模型下载的一个细节YOLO官方权重文件和你想用的版本号必须一致比如训练脚本是YOLOv8就不能加载YOLOv5的.pt文件结构对不上。热词里常有人搜“yolo预训练模型下载”其实就是到官方GitHub的release里找对应版本的yolov8n.pt、yolov8s.pt这类文件。epochs的设定不能只拍脑袋。1838张单类别一般100到200个epoch就能跑到收敛。判断收敛不能只看训练集loss要看验证集map。你可以在训练命令里直接加上patience30意思是连续30个epoch验证集map不提升就自动停止省得干等。4.3 训练过程中的损失函数与bn崩溃判断训练时终端会打印每一轮的loss值YOLO的loss由三部分组成分类损失、框回归损失、置信度损失。单类别任务里分类损失占比变小因为只有两类背景和猕猴桃重点看框回归损失和置信度损失。正常情况是loss整体下降但会有小幅度震荡这是SGD和batch size共同作用的结果不是错误。常见的一个翻车点是训练到一半loss突然变成nan或者某个指标从正常数值直接跳到“nan”。这时候第一反应不是调学习率而是检查是不是bn崩溃了。bn崩溃在热词里经常被提到它指BatchNorm层的统计量因为某些batch的数据异常而爆炸导致后续所有数值都是nan。引发bn崩溃的典型原因包括学习率设置过高、batch太小比如batch2时bn统计不稳定、或者输入图片里有全黑的图。我的检查顺序是先看训练日志里loss是第几个epoch变成nan如果从一开始就nan大概率是数据和标签有问题比如txt越界或者图片损坏如果是几十个epoch后才nan大概率是学习率太大或者batch太小。解决方式是降低学习率比如从0.01降到0.001同时把batch加大到16以上。另外换用YOLO的后续版本对bn崩溃更友好它们会在训练前自动检查标签合法性。训练过程中的模型保存也要注意YOLO默认保存last.pt和best.pt。best.pt是按验证集指标最优保存的last.pt是最后一个epoch的。很多人最后部署时用了last.pt结果发现精度不如预期然后怪数据集不行。其实心里有数一定要选best.pt。5. 避坑从解压到训练最容易被坑的五个点5.1 7z密码正确却一直报错编码与工具版本的问题现象输入密码后终端报“Wrong password”但你能确认密码没输错甚至用其他工具能正常解压一部分文件。原因大概率是压缩包创建时的文件名编码和当前系统不一致。7z的密码检验是逐字节进行的如果你的终端或文件管理器传入的密码字符串编码和压缩时的不一致比如Windows下用GBK输入而压缩包是UTF-8标记就会报错。另一个常见原因是部分老旧7z工具不支持AES-256加密密码对但算法不匹配。解决换用最新版7-Zip或p7zip并在命令行里显式指定编码。Linux下可以这样7z x -p密码 -mcpCP936 数据集.7z-mcpCP936表示使用GBK代码页解析文件名。如果是UTF-8编码改成-mcpUTF-8。这个参数很多人不知道其实大部分中文7z包的解压报错都死在它上面。如果还不行把密码复制粘贴到文本文件里再通过-p$(cat pass.txt)传参排除手输时的键盘布局问题。5.2 图片和标签文件名对不上检测结果全是空现象训练能正常启动但loss一直很大或者验证集map始终接近0。检查标签目录发现很多txt文件名和图片文件名不一致。原因有的数据集在标注时改了图片名但标注文件还保留旧名或者压缩包解压时文件名被截断、乱码。解决写一个重命名脚本统一两者或者用id号把图片和标签串起来。我的做法是先读取所有图片文件名生成一个从图片名去掉后缀到完整路径的映射再遍历txt目录把不在映射里的txt删掉把多出来的图片单独放一个文件夹。有一个原则宁可删图不要让没有标签的图混进训练集。5.3 类别编号从1开始导致类别数对不上现象txt里类别编号写的是1data.yaml的nc1训练时报“class index 1 out of range”。原因很多人受编程习惯影响认为第一个类别的编号是1但YOLO的类别编号是从0开始的。标题里说了1类别那你唯一的类别必须编号为0。解决用sed批量把1改成0但前提是确认txt里没有原本就是0的多类别数据。安全做法是写个Python脚本遍历所有txt把非0的编号全部归0import os for f in os.listdir(labels): if not f.endswith(.txt): continue path os.path.join(labels, f) with open(path) as fp: lines fp.readlines() new_lines [] for line in lines: parts line.split() parts[0] 0 # 强制类别编号为0 new_lines.append( .join(parts)) with open(path, w) as fp: fp.write(\n.join(new_lines))这个脚本只适合单类别数据集多类别千万别用。5.4 训练时bn崩溃导致loss变成nan现象训练到第50个epoch时loss突然变成nan之后重启训练依然在同一个位置附近崩溃。原因这个位置附近可能存在一些异常图片比如纯色图、全黑图、或者标注框严重越界的图。在这些图上计算梯度时bn的方差估计不稳定导致数值爆炸。解决用排除法找出问题图片。把训练集按batch切分逐个batch跑一次前向定位到loss变为nan的batch再检查那个batch里的图片。常见元凶是一张尺寸极小且全黑的图或者一张只有一个像素的图。把这些图删掉或者把batch size调大让bn统计更稳定。如果你使用的是YOLOv8还可以打开cacheram或cachedisk把图片全部缓存后训练减少IO抖动。5.5 混淆矩阵总和不唯一不看指标看什么现象训练结束后打印混淆矩阵发现横纵轴的数字加起来对不上验证集总样本数放在TensorBoard里看每次刷新数值还会变。原因混淆矩阵的统计方式在不同YOLO版本里不一样有的按目标数归一化有的按图片数统计有的只统计置信度大于阈值的预测。这不是bug是统计口径问题。热词里常有人搜“yolo混淆矩阵总合不唯一”本质上是这一类口径差异。解决不要盯着混淆矩阵的总和看三个更稳定的指标mAP50、mAP50-95、Precision。mAP50是IoU阈值0.5时的平均精度对单类别检测来说最直观mAP50-95更严格框偏一点点就会掉分。如果mAP50还行而mAP50-95很低说明你的框定位不够准应该调整回归损失权重或增加训练epochs。6. 训练完怎么验证与进阶mAP、混淆矩阵与部署前的最后检查6.1 用验证集做一次正式评估训练结束时终端会打印验证集指标但这只是“训练过程中的验证”。我习惯单独跑一次评估用val模式把split指定为val集并且关闭数据增强的影响。YOLO的评估命令yolo detect val modelruns/detect/train/weights/best.pt datadata.yaml跑完会输出precision、recall、mAP50和mAP50-95。单类别且标注比较干净的数据集mAP50在0.9以上算正常mAP50-95能在0.7以上就说明框回归质量不错。如果mAP50高但mAP50-95特别低我会去检查是不是图片里有大量被遮挡的猕猴桃——这类目标的标注框本身就不准模型学不出来。这个时候我不会盲目加大epochs而是去调整标注或增加数据增强策略。6.2 用一组真实场景图片做推理测试而不是只信mAPmAP是一个统计指标但它不能告诉你“在灯光偏暗的果园里能不能测准”。我会额外准备一组训练集里没出现过的、真实场景下拍的猕猴桃照片可能只有十几张但一定要包括不同光照、不同遮挡、不同视角。用训练好的模型做推理yolo detect predict modelruns/detect/train/weights/best.pt sourcereal_scenes/ conf0.25 saveTrue推理时框的颜色、置信度、类别名都会保存在输出图里。这一步我每次都做而且每次都能发现新问题。最常见的是小目标漏检——离镜头远的小猕猴桃被忽略尤其是imgsz640时小目标特征不明显。解决方法不是调conf而是把imgsz调到960甚至1280重新训练或者用切片推理。但要注意imgsz增大后训练显存占用几乎翻倍V100能跑普通显卡就要小心OOM。6.3 部署前的一个小习惯最后部署时我习惯把模型转成onnx或TensorRT格式不是直接用.pt。YOLO的导出命令很简单yolo export modelbest.pt formatonnx imgsz640导出后检查一次onnx的输入输出维度和类别名很多时候单独改类别名不会同步到onnx导致推理代码里显示的名字还是默认的“person”。这里可以写一个很小的推理脚本去读onnx的meta信息import onnx model onnx.load(best.onnx) for node in model.metadata_props: if node.key names: print(node.value)这一步是我说的“后悔药”第N次生效的地方——宁可在这里多花十分钟读一下元数据也不要等到部署到嵌入式设备上才发现类别名错乱。这些年我处理过的检测数据集少说也有几十个从红外、无人机到水果分拣最深刻的教训就是数据集和代码一样拿到手第一件事不是跑而是校验。这个1838张的猕猴桃数据集能不能用得好一半看你训练参数另一半看你有没有在解压后认真检查过每一张标签。把前面的校验动作养成习惯后面任何数据集到你手里都不会翻车。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MySQL锁机制全解析:InnoDB行锁、间隙锁与死锁排查实战 2026/10/2 3:33:56

MySQL锁机制全解析:InnoDB行锁、间隙锁与死锁排查实战

1. 从一条慢SQL说起:为什么明明有索引,查起来还是卡死最近在帮一个老项目排查线上问题,现象很典型:某张订单表数据量大概八百多万行,平时查询都挺正常,结果某天下午业务方反馈说后台列表页打不开&#xff0…

阅读更多 →
iOS端银行卡OCR源码实现:预处理、定位与轻量化引擎 2026/10/2 3:33:56

iOS端银行卡OCR源码实现:预处理、定位与轻量化引擎

简介:这是一份面向iOS开发者、移动端OCR技术实践者的银行卡识别(OCR)源码资源,聚焦于快速提取银行卡号与银行名称等关键信息,适用于商户进件、实名认证等需高效填充银行卡数据的业务场景。资源基于自定义AVCapture相机…

阅读更多 →
控诊协同+CA-DANN:跨工况故障诊断的领域自适应实战 2026/10/2 3:33:56

控诊协同+CA-DANN:跨工况故障诊断的领域自适应实战

工业设备维护这行干久了,你会发现一个挺无奈的现实:实验室里跑出99%准确率的诊断模型,搬到车间现场能有个70%就算烧高香。问题出在哪儿?不是算法不够深,也不是数据不够多,而是训练和部署之间的那道数据鸿沟…

阅读更多 →
Flutter在OpenHarmony上实现工具卡片组件:事件通信与状态管理实战 2026/10/2 3:33:56

Flutter在OpenHarmony上实现工具卡片组件:事件通信与状态管理实战

Flutter 在 OpenHarmony 上跑起来之后,我第一个正经做的模块就是这个文件转换助手里的“工具卡片组件”。一开始以为只是个带图标和名称的宫格入口,结果做着做着发现,它几乎串起了整个项目的架构——从跨端通信、状态管理、原生视图嵌入到列表…

阅读更多 →
基于n8n的社媒调研工作流:保留原帖证据的四个模板 2026/10/2 3:33:55

基于n8n的社媒调研工作流:保留原帖证据的四个模板

1. 为什么社媒调研必须保留原帖证据做社媒调研的人都有一个共同的痛点:数据抓下来了,报告写完了,等到要复盘或者被人质疑的时候,回头去找原始帖子,发现已经被删了、被编辑了、或者账号直接注销了。尤其是做竞品分析、舆…

阅读更多 →
从javac到JIT:一文读懂Java编译的完整链路与实战排错 2026/10/2 3:33:42

从javac到JIT:一文读懂Java编译的完整链路与实战排错

如果有人问我会不会编译Java项目,我猜绝大多数人都会想都不想就回答“会啊,IDEA里点一下绿色三角不就行了”。但你再追问一句:javac背后到底做了什么?-classpath参数该传什么?为什么mvn clean package之后运行还是报“…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉