0%

Java 打包详解:使用 jar 命令创建与管理 JAR 文件

JAR(Java Archive)文件是 Java 平台中用于打包类、资源和元数据的归档格式,可用于分发库、应用程序或组件。jar 命令是 JDK 自带的打包工具,支持创建、查看、更新和提取 JAR 文件。本文将详细讲解 jar 命令的用法、参数含义及实战示例,帮助你熟练掌握 Java 打包技巧。

jar 命令基本语法

jar 命令的通用格式如下:

1
jar {操作选项}[参数] [JAR文件名] [清单文件] [入口类] [-C 目录] 文件...

核心操作选项(必选其一)

选项 功能描述
-c 创建新的 JAR 文件(若文件已存在,会覆盖)。
-t 列出 JAR 文件中的内容(目录和文件列表)。
-x 从 JAR 文件中提取指定文件(不指定则提取所有文件)。
-u 更新现有 JAR 文件(添加新文件或替换已有文件)。
-i 为 JAR 文件生成索引信息(加速类加载)。

辅助参数(可选)

选项 功能描述
-v 生成详细输出(显示打包 / 提取的文件列表及进度)。
-f 指定 JAR 文件名(必须紧跟文件名,如 -f app.jar)。
-m 合并指定的清单文件(MANIFEST.MF)到 JAR 中(需指定清单文件路径)。
-e 指定可执行 JAR 的入口类(主类,包含 main 方法)。
-0 仅存储文件,不压缩(适合已压缩的资源,如图片、ZIP)。
-M 不自动生成清单文件(默认会生成基础清单)。
-C 切换到指定目录,再包含后续文件(用于打包其他目录的文件,保持目录结构)。
-P 保留文件的绝对路径或父目录信息(不推荐,可能导致路径混乱)。

jar 命令实战示例

创建 JAR 文件

(1)基本打包(含类文件)

将当前目录下的 Foo.classBar.class 打包为 classes.jar

阅读全文 »

源代码编译详细流程解析

在 Linux 系统中,通过源代码编译安装软件是一种灵活且常见的方式,尤其适用于需要自定义配置或使用最新版本软件的场景。整个过程主要包括configure、make、make install、make clean四个核心步骤,每个步骤都有其特定的作用和原理。

configure:配置编译环境

作用:检查当前系统环境是否满足编译需求(如依赖库、编译器、系统参数等),并生成适配当前系统的编译配置文件(通常是Makefile)。

细节说明

  • 源代码包中通常会包含一个configure脚本(由 Autoconf 工具生成),运行时会执行一系列检查:
    • 是否安装了合适的编译器(如gccg++);
    • 所需的依赖库(如libsslzlib等)是否存在及版本是否兼容;
    • 系统架构、操作系统版本等基础信息;
    • 自定义参数(如安装路径、功能模块开关等)。
  • 常用参数(通过./configure —help查看所有选项):
    • --prefix=PATH:指定软件安装路径(默认通常为/usr/local);
    • --with-LIB:启用指定依赖库的支持(如--with-openssl);
    • --without-LIB:禁用指定依赖库的支持;
    • --enable-FEATURE/--disable-FEATURE:开启 / 关闭特定功能模块。
阅读全文 »

Spring MVC 国际化详解:从原理到实战配置

国际化(Internationalization,简称 i18n)是多语言应用的核心需求,Spring MVC 基于 Java 国际化基础(ResourceBundle),通过 MessageSource(资源加载)和 LocaleResolver(区域解析)两大组件,实现灵活的多语言支持。从 “核心原理→组件解析→配置步骤→实战示例” 四个维度,彻底讲透 Spring MVC 国际化的实现逻辑。

国际化核心原理:Java 基础与 Spring 扩展

Spring MVC 国际化的底层依赖 Java 原生国际化机制,并通过 Spring 组件简化配置与使用:

1. Java 原生国际化基础

Java 通过 ResourceBundle 加载不同语言的资源文件,核心逻辑:

  1. 资源文件命名:按 “基础名语言代码国家代码.properties” 格式命名(如 messages_zh_CN.propertiesmessages_en_US.properties);
  2. Locale 对象:代表语言区域(如 Locale.CHINA 对应中文,Locale.US 对应英文);
  3. 资源加载ResourceBundle.getBundle("基础名", Locale) 加载对应区域的资源文件,通过 getString("key") 获取消息。
示例资源文件:
  • messages_zh_CN.properties(中文):

    1
    2
    3
    4
    user.login=登录
    user.username=用户名
    user.password=密码
    user.welcome=欢迎您,{0}!
  • messages_en_US.properties(英文):

    1
    2
    3
    4
    user.login=Login
    user.username=Username
    user.password=Password
    user.welcome=Welcome, {0}!

2. Spring MVC 的扩展

Java 原生机制需手动处理 ResourceBundleLocale,Spring MVC 通过以下组件简化流程:

  • MessageSource:统一管理资源文件,替代 ResourceBundle,支持消息格式化(如占位符 {0});
  • LocaleResolver:自动解析当前请求的 Locale(如从请求头、Cookie、Session 中获取),无需手动指定;
  • MessageTag(JSP 标签):视图层快速获取国际化消息,无需在 Controller 中传递消息。

核心组件 1:MessageSource(资源文件管理)

MessageSource 是 Spring 管理国际化资源的核心接口,负责加载资源文件、解析消息(支持占位符),常用实现类为 ResourceBundleMessageSource(适用于类路径下的 .properties 文件)。

阅读全文 »

InnoDB 双写机制(Doublewrite):解决部分写失效的关键

InnoDB 的双写机制(Doublewrite)是保障数据页完整性的核心技术,专门用于解决数据库宕机时可能出现的部分写失效问题。理解其原理和作用,有助于深入掌握 InnoDB 的数据可靠性设计。

问题背景:部分写失效的风险

当 InnoDB 刷新缓冲池中的脏页(已修改但未写入磁盘的页)到磁盘时,若发生宕机(如断电),可能出现页只写入部分数据的情况(即 “部分写失效”)。例如:

  • 一个 16KB 的数据页,仅写入前 4KB 时宕机,导致该页损坏。

此时,即使有重做日志(Redo Log)也无法恢复:

  • 重做日志记录的是对页的物理修改操作(如 “在偏移量 100 处写入值 A”),但损坏的页无法作为重做的基础,重做操作会因页结构异常而失效。

双写机制的原理:双重保障数据页完整性

双写机制通过 “先写备份,再写原页” 的方式,确保即使原页写入失败,也能通过备份恢复完整页。

双写的组成部分

双写机制包含两个关键部分:

  • 内存中的 doublewrite buffer:大小为 2MB,临时存放待刷新的脏页数据。
  • 磁盘上的 doublewrite 区域:位于 InnoDB 共享表空间(如 ibdata1)中,连续占用 128 个页(128 × 16KB = 2MB),用于持久化存储 doublewrite buffer 中的数据。

双写的工作流程

当缓冲池中的脏页需要刷新到磁盘时,流程如下:

阅读全文 »

MySQL 配置文件详解:路径、优先级与核心参数

MySQL 的配置文件(通常名为 my.cnfmy.ini)用于设置数据库实例的运行参数(如端口、缓存大小、字符集等)。若未指定配置文件,MySQL 会使用编译时的默认参数启动。本文详细解析配置文件的查找路径、优先级及常用配置。

配置文件的查找路径与优先级

MySQL 启动时会按固定顺序查找配置文件,若多个文件中存在相同参数,后读取的文件会覆盖前面的配置

查看配置文件路径

通过以下命令可查看当前 MySQL 实例查找配置文件的顺序:

1
2
3
mysql --help | grep "my.cnf"  # Linux/Mac
#
mysqld --help --verbose | findstr "my.cnf" # Windows

典型输出(Linux 为例)

1
2
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/bin/my.cnf ~/.my.cnf
  • 路径说明:
    • /etc/my.cnf:系统级配置(对所有用户生效)。
    • /etc/mysql/my.cnf:MySQL 专用系统配置目录。
    • /usr/local/mysql/etc/my.cnf:MySQL 安装目录下的配置(适用于源码安装)。
    • ~/.my.cnf:用户级配置(仅对当前用户生效)。

优先级规则

阅读全文 »