如何使用 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";

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75577.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FastAPI-Cache2: 高效Python緩存庫

FastAPI-Cache2是一個強大而靈活的Python緩存庫&#xff0c;專為提升應用性能而設計。雖然其名稱暗示與FastAPI框架的緊密集成&#xff0c;但實際上它可以在任何Python項目中使用&#xff0c;為開發者提供簡單而高效的緩存解決方案。 在現代應用開發中&#xff0c;性能優化至關…

android開發:zxing-android-embedded豎屏掃描功能

Android 點擊按鈕調用豎屏二維碼掃描 提示&#xff1a;zxing-android-embedded插件已過時&#xff0c;建議更換別的。 場景&#xff1a;Home頁面上有個掃描按鈕&#xff0c;點擊后打開攝像頭完成掃描功能&#xff0c;掃描時要求豎屏。 方案&#xff1a;使用zxing-android-embe…

指令補充+樣式綁定+計算屬性+監聽器

一、指令補充 1. 指令修飾符 1. 作用: 借助指令修飾符, 可以讓指令更加強大 2. 分類: 1> 按鍵修飾符: 用來檢測用戶的按鍵, 配合鍵盤事件使用. keydown 和 keyup 語法: keydown.enter/v-on:keydown.enter 表示當enter按下的時候觸發 keyup.enter/v-on:keyup.enter 表示當…

Python基于時間序列分析的降雨量預測系統的設計與實現【附源碼、文檔說明】

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

【2022】【論文筆記】基于相變材料的光學激活的、用于THz光束操作的編碼超表面——

前言 類型 太赫茲 + 超表面 太赫茲 + 超表面 太赫茲+超表面 期刊 A D V A N C E D ?? O P T I C A L ?? M A T E R I A L S ADVANCED \; OPTICAL \; MATERIALS

[VolgaCTF 2025] Baby-Welcome,BrokeBroke,Field Rules

這個就做了倆題&#xff0c;其實再努力點就是3個。不過最近也算是好成績了&#xff0c;45名。國外的比賽對我來說還算是比較難的。 Baby-Welcome 這個流程還挺麻煩&#xff0c;先是注冊用戶&#xff0c;登錄的用戶可以給其它用戶發消息。收到消息的用戶可以顯示消息&#xff…

再見VS Code!Google IDE 正顛覆傳統開發體驗

云端開發的革命&#xff1a;Google Project IDX 如何顛覆傳統開發體驗 在軟件開發領域&#xff0c;Google 最新推出的 Project IDX 絕非僅僅是另一個“基于瀏覽器的 VS Code”——它是一次真正的范式轉變。與 VS Code、Cursor 等傳統工具不同&#xff0c;IDX 是一個完全云原生的…

NLP高頻面試題(三十六)——深入理解思維鏈(Chain-of-Thought)提示方法

一、什么是思維鏈提示&#xff08;CoT&#xff09;&#xff1f; 思維鏈提示是一種新穎的提示方法&#xff0c;通過向模型提供少量的推理步驟示范&#xff0c;讓語言模型在給出最終答案之前展示出自己的推理過程。其核心思想在于鼓勵模型模仿人類逐步推理的方式&#xff0c;從而…

探索新一代大模型代理(LLM agent)及其架構

在人工智能大模型(AI)的浪潮中&#xff0c;2023年我們見證了檢索增強生成(Retrieval Augmented Generation, RAG)的興起&#xff0c;而2024年則無疑成為了“代理”agent的元年。各大AI企業紛紛投身于聊天機器人代理的研發中&#xff0c;工具如MultiOn通過與外部網站的連接實現了…

26考研——線性表_ 線性表的鏈式表示_雙循環鏈表(2)

408答疑 文章目錄 三、 線性表的鏈式表示雙循環鏈表單鏈表與雙鏈表的比較單鏈表的特點雙鏈表的特點 雙鏈表上基本操作的實現雙鏈表的插入操作雙鏈表的刪除操作 雙鏈表的代碼實操定義結點創建一個結點帶頭結點的雙鏈表初始化創建雙鏈表打印雙鏈表查找結點插入結點在指定節點后插…

【備忘】在Docker中安裝寶塔面板,實現環境隔離,又能快速遷移服務器環境

我的環境是阿里云服務器&#xff08;新環境&#xff09; 【待繼續】 【新方法】 我已經安裝了docker&#xff0c;所以這里我先卸載。 卸載命令&#xff1a; sudo yum remove docker* containerd.io -y Docker默認保存位置是/var/lib/docker/&#xff0c;卸載Docker時&#x…

池化技術的深度解析與實踐指南【大模型總結】

池化技術的深度解析與實踐指南 池化技術作為計算機系統中的核心優化手段&#xff0c;通過資源復用和預分配機制顯著提升系統性能。本文將從原理、實現到最佳實踐&#xff0c;全方位剖析池化技術的核心要點&#xff0c;并結合實際案例說明其應用場景與調優策略。 一、池化技術的…

HCIP【BGP協議(詳解)】

目錄 1 BGP協議產生背景 2 BGP協議特性 2.1 自治系統間路由傳播 2.2 路由矢量協議 2.3 防環機制 2.4 基于TCP傳輸 2.5 路由更新機制 2.6 豐富的路由屬性 2.7 支持CIDR和路由聚合 2.8 路由過濾和策略控制 2.9 動態對等體功能 3 BGP基本術語 4 BGP規劃問題 4.1 路…

VirtualBox 配置雙網卡(NAT + 橋接)詳細步驟

在 VirtualBox 中為 CentOS 虛擬機配置雙網卡&#xff08;NAT 橋接&#xff09;&#xff0c;使其既能訪問外網&#xff08;NAT&#xff09;&#xff0c;又能與宿主機&#xff08;Windows 10&#xff09;或局域網通信&#xff08;橋接&#xff09;。 步驟 1&#xff1a;關閉虛…

Upload-labs靶場通關

之前搭好了靶場&#xff0c;Upload-labs 靶場搭建 及一句話木馬的原理與運用-CSDN博客 今天開始通關并寫詳細流程 Pass-1 來到靶場的第一關 先隨便上傳php 代碼 點擊上傳 發現文件類型被限制了 方法1&#xff1a; 改文件后綴為合法文件&#xff08;.jpg .png .gif&#xf…

[GN] Python3基本數據類型 -- 與C的差異

Python3 面向對象 文章目錄 Python3的基本數據類型6個標準的數據類型NumbersStringListtupleSetsDictionaries Python運算符邏輯 運算符成員運算符身份運算符 Python3 數字Python3 序列序列切片序列相加序列相乘序列相關內置函數 Python3 列表訪問列表的值更新列表刪除列表元素…

MCP over MQTT:EMQX 開啟物聯網 Agentic 時代

前言 隨著 DeepSeek 等大語言模型&#xff08;LLM&#xff09;的廣泛應用&#xff0c;如何找到合適的場景&#xff0c;并基于這些大模型構建服務于各行各業的智能體成為關鍵課題。在社區中&#xff0c;支持智能體開發的基礎設施和工具層出不窮&#xff0c;其中&#xff0c;Ant…

AI助力高效PPT制作:從內容生成到設計優化

隨著人工智能技術的不斷發展&#xff0c;AI在各個領域的應用日益普及&#xff0c;尤其是在文檔和演示文稿的創建過程中。PowerPoint&#xff08;PPT&#xff09;作為最常用的演示工具之一&#xff0c;借助AI的技術手段&#xff0c;可以極大地提高制作效率并提升最終呈現效果。在…

學透Spring Boot — 009. Spring Boot的四種 Http 客戶端

目錄 常見的HttpClient Spring 提供的HttpClient RestTemplate Spring 提供的模板類 XXXTemplate RestTemplate的使用 RestTemplate的使用技巧 RestTemplate的問題 RestClient RestClinet的基本使用 RestClient的自動配置 RestClient 序列化對象 異常處理 onStatus …

leetcode117 填充每個節點的下一個右側節點指針2

LeetCode 116 和 117 都是關于填充二叉樹節點的 next 指針的問題&#xff0c;但它們的區別在于 樹的類型 不同&#xff0c;117與 116 題類似&#xff0c;但給定的樹是 普通二叉樹&#xff08;不一定完全填充&#xff09;&#xff0c;即某些節點可能缺少左或右子節點。 樹的結構…