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

如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)

以下是详细步骤:
1. 创建项目
    1.1 打开 IntelliJ IDEA。
    1.2 在启动界面,点击 Create New Project(创建新项目)。
    1.3 选择 Java,然后点击 Next。
    1.4 确保 Project SDK 选择了正确的 JDK 版本(例如 JDK 1.8 或更高版本)。
    1.5 点击 Next,然后为项目命名(例如 TextSeekServer)。
    1.6 点击 Finish 完成项目创建。
2. 创建包和类
   2.1 在 src 目录下,右键点击 New > Package,创建包 com.myth。
   2.2 在 com.myth 包中,右键点击 New > Java Class,分别创建以下类:
        AESUtil.java
        DBUtil.java
        TextSeekServer.java(包含 main 函数)
3. 创建配置文件
   3.1 在 项目视图 中,找到项目的根目录(例如 TextSeekServer),右键点击 New > Directory,创建目录 resources。
   3.2 在 resources 目录中,右键点击 New > File,分别创建以下文件:
        config.properties
        dbconfig.properties
        maintenance.properties
        log4j2.xml
   3.3 将 resources 目录标记为资源目录
    右键点击 resources 目录 > 选择 Mark Directory as > Resources Root
4. 添加 MariaDB JDBC 驱动
   4.1 下载 mariadb-java-client-3.1.4.jar:
        从 MariaDB JDBC Driver 官方下载页面 下载。
        https://mariadb.com/kb/en/about-mariadb-connector-j/
   4.2 将下载的 JAR 文件放到项目的 lib 目录中:
        在项目根目录下,右键点击 New > Directory,创建目录 lib。
        将 mariadb-java-client-3.1.4.jar 复制到 lib 目录中。
   4.3 将 JAR 文件添加到项目的类路径:
        右键点击 mariadb-java-client-3.1.4.jar,选择 Add as Library。
        在弹出的对话框中:
        Level:选择 Module Library(推荐)或 Global Library
        Add to Module:选择当前模块(例如 TextSeekServer)
        点击 OK
  4.4 验证 lib 目录的状态
      4.4.1 打开 Project Structure(项目结构):
            进入 File > Project Structure。
    4.4.2 在 Modules 选项卡中:
            选择当前模块(例如 TextSeekServer)。
            切换到 Dependencies 选项卡。
            确认 mariadb-java-client-3.1.4.jar 已添加到模块的依赖列表中。
    4.4.3 在 Libraries 选项卡中:
            确认 mariadb-java-client-3.1.4.jar 已作为库添加到项目中
      4.4.4 备注 lib 目录本身不需要被标记为 Sources Root 或
        Resources Root,因为它只是存放 JAR 文件的目录。
        它的作用是通过 Add as Library 将 JAR 文件添加到项目的类路径中

5. 配置项目结构
   5.1 进入 File > Project Structure(项目结构)。
   5.2 在 Modules 选项卡中,确保 src 目录被标记为 Sources,resources 目录被标记为 Resources。
   5.3 在 Libraries 选项卡中,确认 mariadb-java-client-3.1.4.jar 已添加。
6. 配置文件内容
config.properties
# 示例配置
app.name=TextSeekServer
app.version=1.0

dbconfig.properties
# 数据库配置
db.url=jdbc:mariadb://localhost:3306/testdb
db.user=root
db.password=123456

maintenance.properties
# 维护配置
maintenance.mode=false
maintenance.message=System is under maintenance.

log4j2.xml
<Configuration status="WARN">
    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>

        <!-- 文件输出 -->
        <RollingFile name="File" fileName="logs/textseek-server.log"
                     filePattern="logs/textseek-server-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <!-- 每天生成一个新文件 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 文件大小超过10MB时生成新文件 -->
                <SizeBasedTriggeringPolicy size="10 MB"/>
            </Policies>
            <!-- 最多保留7个日志文件 -->
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 根日志记录器 -->
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>

        <!-- 针对TextSeekServer的日志记录器 -->
        <Logger name="com.myth.TextSeekServer" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Logger>
    </Loggers>
</Configuration>
根据log4j2.xml 配置文件,日志文件将输出到 logs/textseek-server.log,并且会根据日期和文件大小进行滚动归档。为了确保日志能够正确输出,你需要创建 logs 目录,并确保程序有权限写入该目录
a. 创建 logs 目录
    在项目根目录下,右键点击 New > Directory,创建 logs 目录。
        目录路径:TextSeekServer/logs/。
    确保 logs 目录位于项目的根目录下,而不是 src 或 resources 目录中。
b. 确保 logs 目录的权限
    如果你在 Windows 系统上运行程序,确保程序有权限写入 logs 目录。
    如果你在Linux或macOS系统上运行程序,确保logs目录的权限允许程序写入:
    chmod 755 logs
c. 日志配置文件的路径
在 log4j2.xml 中,日志文件的路径是相对路径:
<RollingFile name="File" fileName="logs/textseek-server.log"
             filePattern="logs/textseek-server-%d{yyyy-MM-dd}-%i.log">
这意味着日志文件将输出到项目根目录下的 logs 目录中。
d. 运行程序并验证日志输出
    运行程序后,检查 logs 目录是否生成了日志文件:
        主日志文件:textseek-server.log。
        滚动归档文件:textseek-server-{日期}-{序号}.log。
    如果日志文件未生成,检查以下内容:
        确保 logs 目录存在且路径正确。
        确保程序有权限写入 logs 目录。
        检查 log4j2.xml 配置文件是否正确加载
 e. 日志配置文件的内容
你提供的 log4j2.xml 配置文件内容是正确的,以下是关键点说明:
    控制台输出:日志会输出到控制台。
    文件输出:日志会输出到 logs/textseek-server.log,并且每天或文件大小超过 10MB 时会滚动归档。
    日志级别:
        根日志记录器的级别是 info。
        com.myth.TextSeekServer 的日志级别是 debug
如果在Linux或macOS系统上你希望日志文件输出到其他目录,可以修改 fileName 和 filePattern 的路径。例如:
fileName="/var/logs/textseek-server.log"
filePattern="/var/logs/textseek-server-%d{yyyy-MM-dd}-%i.log"

7. 命令行程序转换为 Swing 项目
如果要将此命令行程序转换为 Swing 项目,只需在 TextSeekServer.java 中创建一个 Swing 窗口,并将逻辑移到 Swing 事件监听器中。例如
TextSeekServer.java(Swing 版本)
package com.myth;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;

public class TextSeekServer {
    private static final Logger logger = LogManager.getLogger(TextSeekServer.class);

    public static void main(String[] args) {
        JFrame frame = new JFrame("TextSeekServer");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);

        JButton button = new JButton("Test");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    // 测试 AESUtil
                    String encrypted = AESUtil.encrypt("Hello, World!");
                    String decrypted = AESUtil.decrypt(encrypted);
                    logger.info("Encrypted: " + encrypted);
                    logger.info("Decrypted: " + decrypted);

                    // 测试 DBUtil
                    Connection conn = DBUtil.getConnection();
                    logger.info("Database connection established: " + conn);
                    DBUtil.closeConnection();
                } catch (Exception ex) {
                    logger.error("Error occurred: ", ex);
                }
            }
        });

        frame.getContentPane().add(button);
        frame.setVisible(true);
    }
}

8. 项目结构示例
完成上述步骤后,项目结构应如下所示:
TextSeekServer/
├── src/
│   └── com/
│       └── myth/
│           ├── AESUtil.java
│           ├── DBUtil.java
│           └── TextSeekServer.java
├── resources/
│   ├── config.properties
│   ├── dbconfig.properties
│   ├── maintenance.properties
│   └── log4j2.xml
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
└── logs/

9. 验证目录结构
   9.1 打开 Project Structure(项目结构):
        进入 File > Project Structure。
   9.2 在 Modules 选项卡中,确保:
        src 目录被标记为 Sources (非常重要)。
        resources 目录被标记为 Resources(非常重要)。
   9.3 在 Libraries 选项卡中,确认 mariadb-java-client-3.1.4.jar 已添加。
10. 运行程序
    在 TextSeekServer.java 中编写 main 方法。
    右键点击 TextSeekServer.java,选择 Run 'TextSeekServer.main()'。
11. 将 Java 项目编译成可执行的 JAR 包,可以通过以下步骤完成。我们将使用
    IntelliJ IDEA 的内置功能来打包项目,并确保所有依赖项(如
    mariadb-java-client-3.1.4.jar)和配置文件(如 log4j2.xml 和
    *.properties)都包含在 JAR 包中。
   步骤 1:配置项目结构
    a)确保项目结构正确:
        src 目录包含源代码。
        resources 目录包含配置文件(如 log4j2.xml 和 *.properties)。
        lib 目录包含第三方 JAR 文件(如 mariadb-java-client-3.1.4.jar)。
    b)在 Project Structure 中,确保 resources 目录被标记为 Resources Root:
        进入 File > Project Structure > Modules。
        选择 src 目录,确保它被标记为 Sources。
        选择 resources 目录,确保它被标记为 Resources。
  步骤 2:创建 JAR 包的 Artifact
    a)进入 File > Project Structure > Artifacts。
    b)点击 + 按钮,选择 JAR > From modules with dependencies。
    c)在弹出的对话框中:
        Module:选择你的模块(例如 TextSeekServer)。
        Main Class:选择包含 main 方法的类(例如 com.myth.TextSeekServer)。
        点击 OK。
    d)在 Artifacts 选项卡中,确保以下内容:
        Output Layout 中包含了 src 目录的编译输出(.class 文件)。
        resources 目录的内容被包含在 JAR 包的根目录中。
        lib 目录中的 JAR 文件被包含在 JAR 包的 lib 目录中。
    e)点击 Apply 和 OK 保存配置。
步骤 3:构建 JAR 包
    a)进入 Build > Build Artifacts。(如果菜单 Build Artifacts 为灰色 表示缺少步骤 2)
    b)选择你刚刚创建的 Artifact(例如 TextSeekServer:jar),然后点击 Build。
    c)IntelliJ IDEA 会生成 JAR 包,并将其输出到 out/artifacts/TextSeekServer_jar/ 目录中。
步骤 4:验证 JAR 包
    a)打开生成的 JAR 包(例如 TextSeekServer.jar),检查以下内容:
        确保 com/myth/ 目录中包含编译后的 .class 文件。
        确保 log4j2.xml 和 *.properties 文件位于 JAR 包的根目录中。
        确保 lib/mariadb-java-client-3.1.4.jar 文件位于 JAR 包的 lib 目录中。
    b)如果发现缺少文件,可以手动编辑 Artifacts 配置,确保所有需要的文件和依赖项都被包含。
步骤 5:运行 JAR 包
    打开终端或命令提示符。
    导航到 JAR 包所在的目录:cd out/artifacts/TextSeekServer_jar
    运行 JAR 包:java -jar TextSeekServer.jar
步骤 6:处理依赖项
如果你的 JAR 包依赖外部 JAR 文件(如 mariadb-java-client-3.1.4.jar),可以通过以下方式处理:
方式 1:将依赖项打包到 JAR 包中
    在 Artifacts 配置中,确保所有依赖项都被包含在 JAR 包的 lib 目录中。
    在 MANIFEST.MF 中指定类路径:
        打开 Artifacts 配置,点击 Create Manifest 按钮,生成 MANIFEST.MF 文件。
        在 MANIFEST.MF 中添加 Class-Path 条目,例如:
Class-Path: lib/mariadb-java-client-3.1.4.jar
方式 2:使用外部依赖项
    将依赖项 JAR 文件放在一个单独的目录中(例如 lib)。
    运行 JAR 包时,通过 -cp 参数指定类路径:
java -cp TextSeekServer.jar:lib/* com.myth.TextSeekServer
步骤 7:打包为可执行 JAR(包含所有依赖项)
如果你希望将所有依赖项打包到一个可执行的 JAR 文件中,可以使用 Fat JAR 或 Uber JAR 的方式:
    a)在 Artifacts 配置中,选择 Extract to the target JAR,将所有依赖项解压并合并到主 JAR 文件中。
    b)重新构建 JAR 包。
项目结构示例
打包后的 JAR 包结构如下:
TextSeekServer.jar
├── com/
│   └── myth/
│       ├── AESUtil.class
│       ├── DBUtil.class
│       └── TextSeekServer.class
├── log4j2.xml
├── config.properties
├── dbconfig.properties
├── maintenance.properties
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
└── logs/


如果程序在运行时无法找到 *.properties 文件,例如
[main] ERROR com.myth.TextSeekServer - Error loading conf
ig file: config.properties (系统找不到指定的文件。)
java.io.FileNotFoundException: config.properties (系统找不到指定的文件。)
以下是解决这个问题的详细步骤:
1. 确保配置文件被打包到 JAR 文件中
    1.1 打开生成的 JAR 文件(例如 TextSeekServer.jar),检查以下内容:
        确保 config.properties、dbconfig.properties、maintenance.properties 和 log4j2.xml 文件位于 JAR 包的根目录中。
        如果这些文件缺失,说明它们在打包时没有被正确包含。
    1.2 在 IntelliJ IDEA 中,确保 resources 目录被标记为 Resources Root:
        进入 File > Project Structure > Modules。
        选择 resources 目录,确保它被标记为 Resources。
    1.3 在 Artifacts 配置中,确保 resources 目录的内容被包含在 JAR 包的根目录中:
        进入 File > Project Structure > Artifacts。
        选择你的 Artifact(例如 TextSeekServer:jar)。
        在 Output Layout 中,确保 resources 目录的内容被包含。
    1.4 重新构建 JAR 包:
        进入 Build > Build Artifacts。
        选择你的 Artifact,然后点击 Rebuild。
2. 确保程序正确加载配置文件
在 Java 程序中,加载资源文件(如 config.properties)时,应该使用 ClassLoader 来从类路径中加载文件,而不是直接使用文件路径。
修改代码以从类路径加载配置文件
例如,在 DBUtil.java 中,修改加载配置文件的代码:
import java.io.InputStream;
import java.util.Properties;

public class DBUtil {
    private static Connection connection;

    public static Connection getConnection() throws SQLException {
        if (connection == null || connection.isClosed()) {
            Properties props = new Properties();
            try (InputStream input = DBUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties")) {
                if (input == null) {
                    throw new FileNotFoundException("dbconfig.properties not found in classpath");
                }
                props.load(input);
            } catch (IOException e) {
                throw new RuntimeException("Error loading dbconfig.properties", e);
            }
            String url = props.getProperty("db.url");
            String user = props.getProperty("db.user");
            String password = props.getProperty("db.password");
            connection = DriverManager.getConnection(url, user, password);
        }
        return connection;
    }

    public static void closeConnection() throws SQLException {
        if (connection != null && !connection.isClosed()) {
            connection.close();
        }
    }
}
修改 TextSeekServer.java 中的日志配置加载方式
如果 log4j2.xml 也需要从类路径加载,确保 Log4j2 配置文件的加载方式正确:
import org.apache.logging.log4j.core.config.Configurator;

public class TextSeekServer {
    private static final Logger logger = LogManager.getLogger(TextSeekServer.class);

    public static void main(String[] args) {
        // 从类路径加载 log4j2.xml
        Configurator.initialize(null, "classpath:log4j2.xml");

        logger.info("Starting TextSeekServer...");

        try {
            // 测试 AESUtil
            String encrypted = AESUtil.encrypt("Hello, World!");
            String decrypted = AESUtil.decrypt(encrypted);
            logger.info("Encrypted: " + encrypted);
            logger.info("Decrypted: " + decrypted);

            // 测试 DBUtil
            Connection conn = DBUtil.getConnection();
            logger.info("Database connection established: " + conn);
            DBUtil.closeConnection();
        } catch (Exception e) {
            logger.error("Error occurred: ", e);
        }
    }
}
3. 验证配置文件是否在 JAR 包中
    3.1 打开生成的 JAR 文件(例如 TextSeekServer.jar),检查以下文件是否存在于根目录:
        config.properties
        dbconfig.properties
        maintenance.properties
        log4j2.xml

    3.2 如果文件缺失,重新检查 Artifacts 配置,确保 resources 目录的内容被包含。
问题 1:配置文件仍然找不到
    确保 resources 目录被标记为 Resources Root。
    确保 resources 目录的内容被包含在 JAR 包的根目录中。
    确保程序使用 ClassLoader 从类路径加载文件。
问题 2:日志配置文件未生效
    确保 log4j2.xml 文件位于 JAR 包的根目录中。
    确保程序使用 Configurator.initialize(null, "classpath:log4j2.xml"); 加载日志配置文件。
=====================================================================
如果你希望 resources 目录下的配置文件(如 config.properties、dbconfig.properties 等)可以在运行 JAR 包之前由用户修改,而不是将这些文件打包到 JAR 包中,可以通过以下方式实现:
1. 将配置文件放在 JAR 包外部
将配置文件放在 JAR 包外部的某个目录中(例如与 JAR 包同一目录下的 config 目录),并在程序中动态加载这些文件。
2. 修改项目结构
    2.1 在项目根目录下创建一个 config 目录,用于存放配置文件:
TextSeekServer/
├── config/
│   ├── config.properties
│   ├── dbconfig.properties
│   ├── maintenance.properties
│   └── log4j2.xml
├── src/
│   └── com/
│       └── myth/
│           ├── AESUtil.java
│           ├── DBUtil.java
│           └── TextSeekServer.java
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
├── logs/

└── out/
    └── artifacts/
        └── TextSeekServer_jar/
            └── TextSeekServer.jar
    2.2 将 resources 目录中的配置文件移动到 config 目录中。
3. 修改代码以加载外部配置文件
在程序中,使用文件的绝对路径或相对路径来加载外部的配置文件。
示例代码:加载外部配置文件
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

public class DBUtil {
    private static Connection connection;

    public static Connection getConnection() throws SQLException {
        if (connection == null || connection.isClosed()) {
            Properties props = new Properties();
            try (InputStream input = new FileInputStream("config/dbconfig.properties")) {
                props.load(input);
            } catch (IOException e) {
                throw new RuntimeException("Error loading dbconfig.properties", e);
            }
            String url = props.getProperty("db.url");
            String user = props.getProperty("db.user");
            String password = props.getProperty("db.password");
            connection = DriverManager.getConnection(url, user, password);
        }
        return connection;
    }

    public static void closeConnection() throws SQLException {
        if (connection != null && !connection.isClosed()) {
            connection.close();
        }
    }
}
加载外部日志配置文件
如果 log4j2.xml 也需要从外部加载,可以在程序启动时指定配置文件路径:
import org.apache.logging.log4j.core.config.Configurator;

public class TextSeekServer {
    private static final Logger logger = LogManager.getLogger(TextSeekServer.class);

    public static void main(String[] args) {
        // 从外部加载 log4j2.xml
        Configurator.initialize(null, "config/log4j2.xml");

        logger.info("Starting TextSeekServer...");

        try {
            // 测试 AESUtil
            String encrypted = AESUtil.encrypt("Hello, World!");
            String decrypted = AESUtil.decrypt(encrypted);
            logger.info("Encrypted: " + encrypted);
            logger.info("Decrypted: " + decrypted);

            // 测试 DBUtil
            Connection conn = DBUtil.getConnection();
            logger.info("Database connection established: " + conn);
            DBUtil.closeConnection();
        } catch (Exception e) {
            logger.error("Error occurred: ", e);
        }
    }
}
4. 打包 JAR 文件
    4.1 在 IntelliJ IDEA 中,确保 resources 目录不再包含配置文件。
    4.2 进入 File > Project Structure > Artifacts,确保配置文件中没有包含 config 目录。
    4.3 重新构建 JAR 包:
        进入 Build > Build Artifacts。
        选择你的 Artifact,然后点击 Rebuild。
5. 运行 JAR 包
    5.1 将生成的 JAR 文件和 config 目录放在同一目录下:
your-deployment-folder/
├── config/
│   ├── config.properties
│   ├── dbconfig.properties
│   ├── maintenance.properties
│   └── log4j2.xml
├── lib/
│   ├── log4j-api-2.20.0.jar
│   ├── log4j-core-2.20.0.jar
│   └── mariadb-java-client-3.1.4.jar
├── logs/

└── TextSeekServer.jar
     5.2 打开终端或命令提示符,导航到 JAR 包所在的目录:
cd your-deployment-folder
     5.3 运行 JAR 包:
java -jar TextSeekServer.jar
6. 允许用户修改配置文件
用户可以在运行 JAR 包之前,直接编辑 config 目录中的配置文件(如 config.properties、dbconfig.properties 等),程序会动态加载这些文件。
7. 注意事项
    确保 config 目录中的配置文件路径与代码中的路径一致。
    如果配置文件路径需要灵活配置,可以通过命令行参数或环境变量指定配置文件路径。例如:
java -Dconfig.path=/path/to/config -jar TextSeekServer.jar
然后在代码中读取 config.path 系统属性:
String configPath = System.getProperty("config.path", "config");
String dbConfigPath = configPath + "/dbconfig.properties";

相关文章:

如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)

以下是详细步骤&#xff1a; 1. 创建项目 1.1 打开 IntelliJ IDEA。 1.2 在启动界面&#xff0c;点击 Create New Project&#xff08;创建新项目&#xff09;。 1.3 选择 Java&#xff0c;然后点击 Next。 1.4 确保 Project SDK 选择了正确的 JDK 版本&#x…...

循环神经网络 - 参数学习之随时间反向传播算法

本文中&#xff0c;我们以同步的序列到序列模式为例来介绍循环神经网络的参数学习。 循环神经网络中存在一个递归调用的函数 &#x1d453;(⋅)&#xff0c;因此其计算参数梯度的方式和前馈神经网络不太相同。在循环神经网络中主要有两种计算梯度的方式&#xff1a;随时间反向…...

球类(继承和多态)

父类Ball&#xff0c;设置为抽象类&#xff0c;调用get和set方法创建对象&#xff0c;将子类重写的功能函数抽象化。 // 抽象球类 abstract class Ball {private String name;private double radius; // 半径private double weight; // 重量private double price; // 价格// 构…...

DFS和BFS的模版

dfs dfs金典例题理解就是走迷宫 P1605 迷宫 - 洛谷 dfs本质上在套一个模版&#xff1a; ///dfs #include<bits/stdc.h> using namespace std; int a[10][10]{0}; int m,n,t,ans0; int ex,ey; int v[10][10]{0}; int dx[4]{-1,0,1,0}; int dy[4]{0,1,0,-1}; void dfs(in…...

Ansible Playbook 进阶探秘:Handlers、变量、循环及条件判断全解析

192.168.60.100ansible.com192.168.60.110 client-1.com 192.168.60.120client-2.com192.168.60.130client-1.com 一、Handlers 介绍&#xff1a;在发生改变时执行的操作(类似puppet通知机制) 示例&#xff1a; 当apache的配置文件发生改变时&#xff0c;apache服务才会重启…...

大模型ui设计SVG输出

你是一位资深 SVG 绘画设计师&#xff0c;现需根据以下产品需求创建SVG方案&#xff1a; 产品需求 约拍app 画板尺寸&#xff1a; 宽度&#xff1a;375px&#xff08;基于提供的HTML移动设计&#xff09;高度&#xff1a;812px&#xff08;iPhone X/XS 尺寸&#xff09; 配…...

40--华为IPSec VPN实战指南:构建企业级加密通道

&#x1f6e1;️ 华为IPSec VPN实战指南&#xff1a;构建企业级加密通道 “当数据开始穿盔甲&#xff0c;黑客只能望’密’兴叹” —— 本文将手把手教你用华为设备搭建军用级加密隧道&#xff0c;从零开始构建网络长城&#xff01; 文章目录 &#x1f6e1;️ 华为IPSec VPN实战…...

基于分布式指纹引擎的矩阵运营技术实践:突破平台风控的工程化解决方案

一、矩阵运营的技术痛点与市场现状 风控机制升级 主流平台通过复合指纹识别&#xff08;Canvas渲染哈希WebGL元数据AudioContext频率分析&#xff09;检测多账号关联传统方案成本&#xff1a;单个亚马逊店铺因关联封号月均损失$5000&#xff0c;矩阵规模越大风险指数级增长 …...

MATLAB的24脉波整流器Simulink仿真与故障诊断

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 故障数据采集 2 故障特征提取 3 故障诊断分类 4 结语 本博客内容是在MATLAB2023下完成。 0 引言 对于电力电子电路的故障诊断…...

linux第三次作业

1、将你的虚拟机的网卡模式设置为nat模式&#xff0c;给虚拟机网卡配置三个主机位分别为100、200、168的ip地址 2、测试你的虚拟机是否能够ping通网关和dns&#xff0c;如果不能请修改网关和dns的地址 3、将如下内容写入/etc/hosts文件中&#xff08;如果有多个ip地址则写多行&…...

国标GB28181视频平台EasyCVR顺应智慧农业自动化趋势,打造大棚实时视频监控防线

一、方案背景 近年来&#xff0c;温室大棚种植技术凭借其显著的优势&#xff0c;在提升农作物产量和质量、丰富农产品供应方面发挥了重要的作用&#xff0c;极大改善了人们的生活水平&#xff0c;得到了广泛的推广和应用。大棚内的温度、湿度、光照度和二氧化碳浓度等环境因素…...

HOW - 如何测试 React 代码

目录 一、使用 React 测试库&#xff1a;testing-library/react二、使用测试演练场&#xff1a;testing-playground.com三、使用 Cypress 或 Playwright 进行端到端测试四、使用 MSW 在测试中模拟网络请求 一、使用 React 测试库&#xff1a;testing-library/react testing-li…...

LU分解原理与C++实现:从理论到实践

LU分解原理与C++实现:从理论到实践 a. LU分解基础理论 矩阵的LU分解在数值计算领域占据着举足轻重的地位,它不仅是解决线性方程组的有力工具,还在众多科学与工程问题中发挥着关键作用。从数学定义来看,LU分解是将一个方阵 A A A 分解为一个单位下三角矩阵 L L L 和一个…...

【Vue3知识】组件间通信的方式

组件间通信的方式 概述**1. 父子组件通信****父组件向子组件传递数据&#xff08;Props&#xff09;****子组件向父组件发送事件&#xff08;自定义事件&#xff09;** **2. 兄弟组件通信****通过父组件中转****使用全局状态管理&#xff08;如 Pinia 或 Vuex&#xff09;** **…...

HOOPS Visualize:跨平台、高性能的三维图形渲染技术解析

在当今数字化时代&#xff0c;三维可视化技术已成为众多行业的核心竞争力。HOOPS Visualize作为一款功能强大的三维图形渲染引擎&#xff0c;凭借其卓越的渲染能力、跨平台支持、丰富的交互功能、高度定制化以及快速部署等特性&#xff0c;为开发人员提供了构建高质量、高性能3…...

git 的常用指令

以下是 Git 命令分类大全&#xff0c;覆盖日常开发、团队协作和高级操作场景&#xff0c;按功能分类整理&#xff1a; 一、配置与初始化 命令说明git config --global user.name "Your Name"设置全局用户名git config --global user.email "emailexample.com&q…...

python学智能算法(九)|决策树深入理解

【1】引言 前序学习进程中&#xff0c;初步理解了决策树的各个组成部分&#xff0c;此时将对决策树做整体解读&#xff0c;以期实现深入理解。 各个部分的解读文章链接为&#xff1a; python学智能算法&#xff08;八&#xff09;|决策树-CSDN博客 【2】代码 【2.1】完整代…...

蓝桥杯 C/C++ 组历届真题合集速刷(一)

一、1.单词分析 - 蓝桥云课 &#xff08;模拟、枚举&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std;int main() {string s;cin>>s;unordered_map<char,int> mp;for(auto ch:s){mp[ch];}char result_charz;int max_count0;fo…...

多类型医疗自助终端智能化升级路径(代码版.上)

大型医疗自助终端的智能化升级是医疗信息化发展的重要方向,其思维链一体化路径需要围绕技术架构、数据流协同、算法优化和用户体验展开: 一、技术架构层:分布式边缘计算与云端协同 以下针对技术架构层的分布式边缘计算与云端协同模块,提供具体编程实现方案: 一、边缘节点…...

区间 DP 详解

文章目录 区间 DP分割型合并型环形合并 区间 DP 区间 DP&#xff0c;就是在对一段区间进行了若干次操作后的最小代价&#xff0c;一般是合并和拆分类型。 分割型 分割型&#xff0c;指把一个区间内的几项分开拆成一份一份的&#xff0c;再全部合起来就是当前答案&#xff0c…...

如何在多线程中安全地使用 PyAudio

1. 背景介绍 在多线程环境下使用 PyAudio 可能会导致段错误&#xff08;Segmentation Fault&#xff09;或其他不可预期的行为。这是因为 PyAudio 在多线程环境下可能会出现资源冲突或线程安全问题。 PyAudio 是一个用于音频输入输出的 Python 库&#xff0c;它依赖于 PortAu…...

QAM 信号的距离以及能量归一化

QAM星座图平均功率能量_星座图功率计算-CSDN博客 正交幅度调制(QAM) - Vinson88 - 博客园 不同阶QAM调制星座图中&#xff0c;符号能量的归一化计算原理_qpsk的星座图归一化-CSDN博客 https://zhuanlan.zhihu.com/p/690157236...

Reactive编程框架与工具

文章目录 6.2 后端 Reactive 框架6.2.1 Spring WebFlux核心架构核心组件实际应用高级特性性能优化适用场景与限制 6.2.2 Akka&#xff08;Actor模型&#xff09;Actor模型基础基本用法高级特性响应式特性实现性能优化实际应用场景优势与挑战 6.2.3 Vert.x&#xff08;事件驱动&…...

五子棋游戏开发:静态资源的重要性与设计思路

以下是以CSDN博客的形式整理的关于五子棋游戏静态资源需求的文章&#xff0c;基于我们之前的讨论&#xff0c;内容结构清晰&#xff0c;适合开发者阅读和参考。我尽量保持技术性、实用性&#xff0c;同时加入一些吸引读者的亮点。 五子棋游戏开发&#xff1a;静态资源的重要性与…...

Python爬虫第7节-requests库的高级用法

目录 前言 一、文件上传 二、Cookies 三、会话维持 四、SSL证书验证 五、代理设置 六、超时设置 七、身份认证 八、Prepared Request 前言 上一节&#xff0c;我们认识了requests库的基本用法&#xff0c;像发起GET、POST请求&#xff0c;以及了解Response对象是什么。…...

Maven的安装配置-项目管理工具

各位看官&#xff0c;大家早安午安晚安呀~~~ 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习&#xff1a;Maven的安装配置-项目管理工具 目录 1.什么是Maven&#xff1f;Maven用来干什么的&#xff1f…...

智能 SQL 优化工具 PawSQL 月度更新 | 2025年3月

&#x1f4cc; 更新速览 本月更新包含 21项功能增强 和 9项问题修复&#xff0c;重点提升SQL解析精度与优化建议覆盖率。 一、SQL解析能力扩展 ✨ 新增SQL语法解析支持 SELECT...INTO TABLE 语法解析&#xff08;3/26&#xff09; ALTER INDEX RENAME/VISIBLE 语句解析&#…...

Ubuntu虚拟机编译安装部分OpenCV模块方法实现——保姆级教程

Ubuntu虚拟机的安装过程可以查看另一篇文章&#xff1a;VMware安装Ubuntu虚拟机实现COpenCV代码在虚拟机下运行教程-CSDN博客 目前我们已经下载好了OpenCV&#xff0c;这里以OpenCV4.5.2为例。 在内存要求尽可能小的情况下&#xff0c;可以尝试只编译安装代码中使用到的OpenC…...

find指令中使用正则表达式

linux查找命令能结合正则表达式吗 find命令要使用正则表达式需要结合-regex参数 另&#xff0c;-type参数可以指定查找类型(f为文件&#xff0c;d为文件夹) rootlocalhost:~/regular_expression# ls -alh 总计 8.0K drwxr-xr-x. 5 root root 66 4月 8日 16:26 . dr-xr-…...

Java Web从入门到精通:全面探索与实战(二)

Java Web从入门到精通&#xff1a;全面探索与实战&#xff08;一&#xff09;-CSDN博客 目录 四、Java Web 开发中的数据库操作&#xff1a;以 MySQL 为例 4.1 MySQL 数据库基础操作 4.2 JDBC 技术深度解析 4.3 数据库连接池的应用​ 五、Java Web 中的会话技术&#xff…...