Apache Commons CLI:构建命令行应用的利器

引言

大家好!我是小黑,本文聊聊如何用Apache Commons CLI构建命令行应用。咱们都知道,命令行界面(CLI)虽然看起来不如图形界面那么花哨,但在许多场景下,它的效率和便利性是无与伦比的。特别是对于服务器应用、小工具或者快速原型开发,CLI常常是我们的首选。但是,搞定一堆命令行参数可不是件容易的事,特别是当参数多起来的时候。这时候,Apache Commons CLI就派上用场了!

Apache Commons CLI库为Java应用提供了一个简单而强大的框架,用来解析命令行参数。它不仅能帮咱们节省编码时间,还能让程序看起来更专业。想象一下,一个带有帮助信息、格式校验和参数解析的命令行工具,是不是让人感觉就像是大公司出品的呢?下面,小黑就带大家一起深入探索Apache Commons CLI的世界,看看它是如何成为构建命令行应用的利器的。

Apache Commons CLI 概览

咱们来聊聊什么是Apache Commons CLI。这个库,其实是一系列用于解析命令行参数的类的集合。你知道,命令行参数是程序运行时通过命令行传入的信息,比如咱们经常用的 -v 来显示版本信息,或者 -help 来获取帮助信息。Apache Commons CLI就是用来处理这些参数的。

为什么要选择Apache Commons CLI呢?首先,它非常灵活,可以处理各种复杂的命令行参数格式。其次,它还支持生成帮助信息,这对于用户来说非常友好。此外,它的使用简单,可以快速集成到现有的Java应用中。这些特性让Apache Commons CLI成为了处理命令行参数的不二之选。

接下来,让咱们来看看Apache Commons CLI的核心功能:

  • 定义命令行选项:可以轻松定义各种类型的命令行参数,包括简单的开关、带有值的参数等。
  • 命令行参数解析:提供了强大的解析器,用于解析用户输入的命令行参数。
  • 生成帮助信息:可以自动生成格式良好的帮助信息,提高用户体验。

好了,基本概念咱们聊完了,下面小黑就用代码来展示一下Apache Commons CLI的威力。别担心,代码会写得很详细,注释也会放在适当的地方,确保大家都能跟上。

import org.apache.commons.cli.*;

public class CommandLineApp {
    public static void main(String[] args) {
        // 创建Options对象,用于定义命令行参数
        Options options = new Options();
        
        // 定义一个简单的参数 -v 或 --version,用来显示版本信息
        Option version = new Option("v", "version", false, "显示版本信息");
        options.addOption(version);

        // 定义一个带有参数值的选项 -c 或 --config,用于指定配置文件路径
        Option config = new Option("c", "config", true, "配置文件路径");
        options.addOption(config);

        // 创建命令行解析器
        CommandLineParser parser = new DefaultParser();
        try {
            // 解析命令行参数
            CommandLine cmd = parser.parse(options, args);
            
            // 检查是否有版本参数
            if (cmd.hasOption("version")) {
                System.out.println("版本 1.0");
            }
            
            // 检查是否指定了配置文件
            if (cmd.hasOption("config")) {
                System.out.println("使用配置文件:" + cmd.getOptionValue("config"));
            }
        } catch (ParseException e) {
            System.out.println(e.getMessage());
            new HelpFormatter().printHelp("工具名称", options);
        }
    }
}

在这个示例中,小黑定义了两个命令行参数:一个是 -v(或 --version),用来显示版本信息;另一个是 -c(或 --config),后面跟着一个值,用来指定配置文件的路径。然后,创建了一个命令行解析器来解析这些参数。如果用户输入的参数有误,程序会显示错误信息,并打印出帮助信息。

使用与设置

接下来,小黑要和咱们聊聊如何安装和设置Apache Commons CLI。使用这玩意儿其实一点都不难,但咱们还是得一步一步来,确保一切顺利。

咱们需要确保Java环境已经配置好了。毕竟,Apache Commons CLI是Java的库,没有Java环境就用不了。然后,就是添加Apache Commons CLI库到咱们的项目中。这里有几种方式,但最常用的还是通过Maven或Gradle这样的构建工具来管理依赖。

使用Maven添加依赖

如果咱们的项目是用Maven构建的,那添加Apache Commons CLI就像加点调料一样简单。只需在项目的pom.xml文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.4</version> <!-- 这里使用最新可用版本 -->
    </dependency>
</dependencies>
使用Gradle添加依赖

如果咱们用的是Gradle,那也不复杂。只需要在build.gradle文件中添加类似的依赖:

dependencies {
    implementation 'commons-cli:commons-cli:1.4' // 同样,使用最新版本
}
手动添加JAR

如果咱们不用构建工具,也可以直接下载Apache Commons CLI的jar文件,然后加入到项目的类路径中。这种方式比较原始,但有时候在某些特定环境下可能还是需要的。

好了,依赖搞定之后,咱们就可以开始使用Apache Commons CLI了。下面,小黑就用一个简单的例子来展示如何在Java项目中使用Apache Commons CLI。

import org.apache.commons.cli.*;

public class MyApp {
    public static void main(String[] args) {
        // 定义命令行参数
        Options options = new Options();
        Option input = new Option("i", "input", true, "输入文件路径");
        input.setRequired(true); // 设置为必需参数
        options.addOption(input);

        // 解析命令行参数
        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();
        CommandLine cmd;

        try {
            cmd = parser.parse(options, args);
            String inputFile = cmd.getOptionValue("input");
            System.out.println("输入文件为: " + inputFile);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
            formatter.printHelp("MyApp", options); // 打印帮助信息

            System.exit(1);
        }
    }
}

在这个例子中,小黑定义了一个命令行参数-i--input,用来指定一个输入文件的路径。这个参数是必须的,如果用户没提供,程序就会显示错误信息,并打印帮助信息。

通过这个简单的例子,咱们可以看到Apache Commons CLI是如何工作的。它不仅能帮咱们解析命令行参数,还能在必要的时候提供帮助信息,让用户更容易使用咱们的程序。

核心概念与使用

定义命令行选项(Options)

在Apache Commons CLI中,一切都围绕着Options类展开。这个类用来定义咱们的命令行参数。每个Option对象都代表一个参数。我们可以定义参数的短名称、长名称、描述,甚至指定是否需要附加值。

例如,假设小黑要开发一个简单的文件处理工具,这个工具需要接收输入文件路径和一个可选的输出文件路径。下面的代码展示了如何定义这些命令行选项:

Options options = new Options();

Option input = new Option("i", "input", true, "输入文件路径");
input.setRequired(true); // 这是一个必需的选项
options.addOption(input);

Option output = new Option("o", "output", true, "输出文件路径");
output.setRequired(false); // 这是一个可选的选项
options.addOption(output);
解析命令行(CommandLineParser)

定义好命令行选项后,下一步是解析用户输入的命令行参数。Apache Commons CLI提供了CommandLineParser类来处理这项任务。咱们可以使用它来解析参数,并根据需要进行处理。

小黑接着上面的例子,来展示如何解析命令行参数:

CommandLineParser parser = new DefaultParser();
try {
    CommandLine cmd = parser.parse(options, args);

    if (cmd.hasOption("input")) {
        System.out.println("输入文件: " + cmd.getOptionValue("input"));
    }

    if (cmd.hasOption("output")) {
        System.out.println("输出文件: " + cmd.getOptionValue("output"));
    }
} catch (ParseException e) {
    System.out.println("解析命令行出错: " + e.getMessage());
    new HelpFormatter().printHelp("文件处理工具", options);
    System.exit(1);
}

在这段代码中,我们创建了一个DefaultParser对象来解析命令行参数。如果解析过程中发生错误,程序会捕获ParseException异常,打印错误信息,然后显示帮助信息。

帮助信息(HelpFormatter)

Apache Commons CLI允许咱们生成帮助信息。这是通过HelpFormatter类实现的。这个功能对于提高用户体验非常有用,尤其是当用户不清楚如何使用咱们的命令行工具时。

让我们再次看看小黑的文件处理工具示例,来看看如何生成帮助信息:

HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("文件处理工具", options);

如果用户输入了错误的命令行参数,或者他们需要获取更多信息时,咱们可以使用这段代码来显示一个格式良好的帮助信息。

通过以上的介绍和代码示例,咱们可以看出,Apache Commons CLI的强大之处在于它简化了命令行参数的处理过程。无论是定义命令行选项、解析参数,还是生成帮助信息,这个库都能让这些任务变得既简单又直观。

到这里,咱们已经掌握了使用Apache Commons CLI的基本知识。接下来,小黑会带大家一起看看一些更实际的应用案例,这样咱们就能更好地理解如何在真实世界中使用这个强大的工具了。让我们继续前进吧!

实际案例分析

创建一个简单的命令行应用

首先,咱们来创建一个简单的命令行应用。假设这个应用是一个文件分析器,它接受一个文件路径作为输入,并提供一些分析选项,比如统计文件行数或者单词数。

import org.apache.commons.cli.*;

public class FileAnalyzer {
    public static void main(String[] args) {
        Options options = new Options();

        Option input = new Option("i", "input", true, "输入文件路径");
        input.setRequired(true);
        options.addOption(input);

        Option countLines = new Option("l", "lines", false, "统计行数");
        Option countWords = new Option("w", "words", false, "统计单词数");
        options.addOption(countLines);
        options.addOption(countWords);

        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();
        CommandLine cmd;

        try {
            cmd = parser.parse(options, args);
            String inputFile = cmd.getOptionValue("input");
            
            if (cmd.hasOption("lines")) {
                // 这里添加统计行数的逻辑
                System.out.println("统计行数功能被选中");
            }
            if (cmd.hasOption("words")) {
                // 这里添加统计单词数的逻辑
                System.out.println("统计单词数功能被选中");
            }
            
            System.out.println("输入文件: " + inputFile);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
            formatter.printHelp("文件分析器", options);
            System.exit(1);
        }
    }
}

在这个例子中,咱们定义了三个命令行选项:一个是必需的输入文件路径,另外两个是可选的统计行数和单词数功能。程序会根据用户输入的选项执行相应的逻辑。

高级功能应用

接下来,让我们看看一些更高级的功能。假设咱们想让用户能够指定一些额外的配置,比如输出格式。Apache Commons CLI允许咱们定义带有多个值的选项。

Option outputFormat = Option.builder("f")
                            .longOpt("format")
                            .hasArgs()
                            .desc("输出格式,支持的格式有:csv, json")
                            .build();
options.addOption(outputFormat);

在这段代码中,我们定义了一个名为-f--format的选项,它可以接受多个值,比如csvjson。这样用户就可以指定一个或多个输出格式。

if (cmd.hasOption("format")) {
    String[] formats = cmd.getOptionValues("format");
    System.out.println("选择的输出格式:");
    for (String format : formats) {
        System.out.println(format);
    }
}

通过这种方式,咱们可以让命令行工具更加灵活和强大。用户可以根据需要选择多种输出格式,而咱们的程序能够相应地处理这些输入。

最佳实践

代码组织

让咱们谈谈代码组织。在使用Apache Commons CLI时,一个清晰的代码结构非常重要。这不仅有助于理解和维护代码,还能让后来者更容易上手。

public class CommandLineTool {

    private Options buildOptions() {
        Options options = new Options();
        // 定义命令行选项
        options.addOption(Option.builder("i")
                                .longOpt("input")
                                .hasArg()
                                .desc("输入文件路径")
                                .required()
                                .build());
        // 可以添加更多的选项
        return options;
    }

    private void parseArguments(String[] args) {
        CommandLineParser parser = new DefaultParser();
        try {
            CommandLine cmd = parser.parse(buildOptions(), args);
            // 根据cmd执行不同的逻辑
        } catch (ParseException e) {
            System.out.println("错误: " + e.getMessage());
            new HelpFormatter().printHelp("命令行工具", buildOptions());
        }
    }

    public static void main(String[] args) {
        new CommandLineTool().parseArguments(args);
    }
}

在这个例子中,小黑将创建选项和解析逻辑分开,这样代码更加模块化,也易于管理。将创建选项的代码放在一个单独的方法中可以提高代码的可读性和可维护性。

错误处理

对于命令行工具来说,优雅的错误处理是非常重要的。如果用户输入了无效的命令或参数,咱们应该提供清晰的错误信息,以及如何正确使用工具的提示。

在上面的代码示例中,如果解析命令行参数时发生错误,ParseException会被捕获,并显示错误信息。此外,还会打印出工具的使用帮助。这种方式对用户友好,能帮助他们快速了解如何正确使用工具。

灵活运用Apache Commons CLI

Apache Commons CLI提供了许多高级特性,比如支持多种类型的参数(布尔型、字符串型等),以及能够处理多个值的选项。咱们可以根据具体需求灵活运用这些特性。

例如,如果命令行工具需要处理复杂的参数组合或依赖关系,咱们可以通过编程逻辑来实现这些需求。Apache Commons CLI为此提供了强大的支持,但需要咱们仔细设计命令行参数的逻辑。

常见问题与解决方案

问题1:参数依赖性和互斥性

在实际开发中,咱们可能遇到一些命令行参数之间具有依赖性或互斥性的情况。例如,某个参数只有在另一个参数存在时才有效,或者两个参数不能同时使用。

解决方案:Apache Commons CLI本身不直接支持声明参数的依赖性或互斥性,但咱们可以通过编程逻辑来实现这一点。

CommandLine cmd = parser.parse(options, args);
if (cmd.hasOption("A") && cmd.hasOption("B")) {
    System.out.println("错误:参数A和参数B不能同时使用。");
    System.exit(1);
}

if (cmd.hasOption("C") && !cmd.hasOption("D")) {
    System.out.println("错误:使用参数C时,必须同时指定参数D。");
    System.exit(1);
}
问题2:处理未知参数

有时候,用户可能会输入一些未定义的参数,这可能导致解析器抛出异常。

解决方案:可以使用DefaultParser的一个特性,允许未知参数的存在。这样,解析器在遇到未定义的参数时不会抛出异常。

CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args, true); // 启用未知参数的处理
问题3:复杂参数的处理

对于一些复杂的参数,比如需要接收多个值或特定格式的值,传统的命令行参数处理可能变得复杂。

解决方案:对于接收多个值的参数,可以使用Option类的hasArgs()方法。而对于需要特定格式的值,可以在代码中进行额外的验证。

Option complexOption = Option.builder("c")
                            .hasArgs()
                            .desc("接受多个值的复杂参数")
                            .build();
options.addOption(complexOption);

// 在解析后验证参数值
String[] values = cmd.getOptionValues("c");
for (String value : values) {
    // 对值进行格式验证
}
问题4:生成动态帮助信息

在有些情况下,咱们希望根据不同的情况生成不同的帮助信息。

解决方案:可以通过编程逻辑动态构建Options对象,然后使用HelpFormatter生成帮助信息。

HelpFormatter formatter = new HelpFormatter();
if (特定条件) {
    Options dynamicOptions = new Options();
    // 添加特定条件下的选项
    formatter.printHelp("工具名", dynamicOptions);
} else {
    formatter.printHelp("工具名", options);
}

总结

Apache Commons CLI作为一个强大的Java库,它在处理命令行参数方面提供了巨大的便利。从基本的参数解析到复杂的参数处理,从错误管理到生成帮助信息,Apache Commons CLI都展示了其出色的灵活性和功能性。通过今天的学习,咱们可以看到,无论是对于初学者还是有经验的开发者,掌握这个库都是非常有价值的。

回顾重点
  1. 命令行参数的定义与解析:咱们学习了如何定义各种类型的命令行参数,并使用Apache Commons CLI的解析器来解析这些参数。

  2. 高级特性的应用:包括处理多值参数、自定义帮助信息等,这些高级功能可以使咱们的命令行工具更加强大。

  3. 错误处理与用户帮助:咱们了解了如何优雅地处理错误和为用户提供有用的帮助信息。

  4. 最佳实践:从代码结构到异常处理,咱们探讨了在使用Apache Commons CLI时的一些最佳实践。

  5. 解决常见问题:对于在使用过程中可能遇到的一些常见问题,咱们提供了实用的解决方案。

通过这个博客,咱们不仅学习了Apache Commons CLI的基本用法,还探讨了如何在真实场景中有效地应用这些知识。记住,无论是在个人项目还是在工作中,掌握如何处理命令行参数都是一个非常有价值的技能。

最后,希望大家在实际应用中能够灵活运用今天学到的内容,创建出更加强大、易用的命令行工具。如果在使用过程中遇到任何问题,不要忘了回顾今天的内容,或者寻找Apache Commons CLI的官方文档和社区支持。

感谢大家的关注和学习,希望这个博客对你们有所帮助。祝大家编程愉快,再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式--命令模式

实验16&#xff1a;命令模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解命令模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用命令模式解决实际问题。 [实验任务]&#xff1a;多次撤销和重复的命令模式 某系…

uni-app之HelloWorld实现

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

Codeforces Round 917 (Div. 2)(A~D)(又是数学题)

A - Least Product 题意&#xff1a; 思路&#xff1a;若有奇数个负数&#xff0c;则不需要任何操作。若存在0&#xff0c;也不需要任何操作。其余情况将任意一个数改为0即可。 #include <bits/stdc.h> using namespace std; void solve() {int n;cin >> n;int …

第十五节TypeScript 接口

1、简介 接口是一系列抽象方法的声明&#xff0c;是一些方法特征的集合&#xff0c;这些方法都应该是抽象的&#xff0c;需要有由具体的类去实现&#xff0c;然后第三方就可以通过这组抽象方法调用&#xff0c;让具体的类执行具体的方法。 2、接口的定义 interface interface_…

编程规范:长函数的思考

在工作&#xff0c;我们应该都不想看到非常的长函数。对于一个运行5年左右的项目&#xff0c;极有可能出现这种情况。由于长函数的长、if/else嵌套&#xff0c;导致代码的可读性非常差&#xff0c;这对于项目的维护和开发带来了极大的困难。所以我们应该避免写长函数&#xff0…

OpenAI科学家Hyung Won Chung演讲精华版

文章目录 第一个观点&#xff1a;涌现第二个观点&#xff1a;如何扩大规模1、标记化2、嵌入3、计算4、评估&#xff08;损失函数&#xff09;5、反向传播 最近从Google跳槽到OpenAI的AI科学家 Hyung Won Chung 比较拗口&#xff0c;我就简称尚哥了 他最近做了一个技术演讲 …

智能化中的控制与自动化中的控制不同

智能化中的控制相对于自动化中的控制更加灵活、智能、综合和学习能力强。智能化控制系统能够根据实际情况进行自主决策和优化&#xff0c;适用范围更广&#xff0c;效果更好。 首先&#xff0c;智能化控制系统能够根据外部环境的变化和实时数据的反馈来自主调整和优化控制策略&…

java实现深度优先搜索 (DFS) 算法

度优先搜索&#xff08;Depth First Search&#xff0c;DFS&#xff09;算法是一种用于遍历或搜索图或树的算法。这种算法从一个节点开始&#xff0c;沿着一条路径尽可能深地搜索&#xff0c;直到遇到不能继续前进的节点时返回上一个节点&#xff0c;然后继续搜索其他路径。具体…

Mac 右键拷贝文件失效

问题&#xff1a;Mac 右键拷贝文件失效&#xff0c;有时候拷贝可以成功&#xff0c;有时候拷贝不成功 发现问题所在&#xff1a;开了百度翻译的划词&#xff0c; 解决&#xff1a;把划词关掉就好了&#xff0c;或者设置划词快捷键翻译就好了&#xff0c;反正就不要一划就翻译那…

案例167:基于微信小程序的校园失物招领小程序

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

三道C语言中常见的笔试题及答案(一)

题目一&#xff1a; 问题&#xff1a; 解释以下代码中的#define预处理指令的作用&#xff0c;并说明其优点和缺点。 #include <stdio.h> #define PI 3.14159 #define CALCULATE_AREA(r) (PI * r * r) int main() { double radius 5.0; double area CALCULATE_AREA(r…

线程的同步与互斥

抢票的例子 竞争过程 进程A被切走 进程B被切走 结论&#xff1a; 互斥 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); mutex: 指向要初始化的互斥锁的指针。attr: 用于设置互斥锁属性的指针&#xff0c;通常可以传入 NULL 以使用默认属性…

Node.js教程-express框架

概述 Express是基于Node.js平台(建立在Node.js内置的http模块上)&#xff0c;快速、开放、极简的Web开发框架。 中文官网 http://www.expressjs.com.cn/。 Github地址&#xff1a;https://github.com/orgs/expressjs。 Express核心特性&#xff1a; 可设置中间件来响应 HTTP…

智能优化算法应用:基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于法医调查算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.…

基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道

作者&#xff1a;尹航 在前文基于阿里云服务网格流量泳道的全链路流量管理&#xff08;一&#xff09;&#xff1a;严格模式流量泳道中&#xff0c;我们介绍了使用服务网格 ASM 的严格模式流量泳道进行全链路灰度管理的使用场景。该模式对于应用程序无任何要求&#xff0c;只需…

4. java——多态(java巅峰设计,超越了C++的理解,取其精华,去其糟粕)

多态指的是同—个行为具有多个不同表现形式 。是指—个类实例(对象&#xff09;的相同方法在不同情形下具有 不同表现形式。封装和继承是多态的基础&#xff0c;也就是说&#xff0c;多态只是—种表现形式而已。一个对象&#xff0c;同一个方法不同形态&#xff0c;方法必须重…

Redis源码精读:准备工作

文章目录 前言拉取源码项目结构源码阅读技巧最后 前言 我是醉墨居士&#xff0c;未来的一段时间里面我准备写一些关于Redis源码的文章&#xff0c;来帮助大家深入浅出Redis&#xff0c;希望大家多多支持&#x1fae0; 拉取源码 git clone https://github.com/redis/redis项目…

大数据----基于sogou.500w.utf8数据的MapReduce编程

目录 一、前言二、准备数据三、编程实现3.1、统计出搜索过包含有“仙剑奇侠传”内容的UID及搜索关键字记录3.2、统计rank<3并且order>2的所有UID及数量3.3、上午7-9点之间&#xff0c;搜索过“赶集网”的用户UID3.4、通过Rank&#xff1a;点击排名 对数据进行排序 四、参…

爬虫响应cookie阿里系案例:某财经

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、响应cookie阿里系特点 cookie中一定有acw_sc__v2清除所有cookie刷新页面时&#xff0c;会自动debugger到设置cookie的文件…

YOLOv8改进 | 主干篇 | 利用SENetV2改进网络结构 (全网首发改进)

一、本文介绍 本文给大家带来的改进机制是SENetV2&#xff0c;其是2023.11月的最新机制(所以大家想要发论文的可以在上面下点功夫)&#xff0c;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型&#xff0c;而是一个可以和现有的任何…