# Jar库Maven插件
**Repository Path**: langle123/JarLibrary-maven-plugin
## Basic Information
- **Project Name**: Jar库Maven插件
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-01-08
- **Last Updated**: 2026-05-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Java, Maven
## README
# JarLibrary Maven Plugin
## 介绍
JarLibrary Maven Plugin 是一个 Maven 插件,用于将项目依赖的 JAR 包复制到指定目录,并生成包含 SHA-256 哈希值的清单文件。该插件可用于在
Maven 打包时收集和管理项目依赖。
## 功能特性
- ✅ 自动复制项目依赖到指定目录
- ✅ 生成 SHA-256 哈希清单文件,用于依赖完整性验证
- ✅ 支持黑名单过滤(排除指定的依赖)
- ✅ 支持自定义输出路径
- ✅ 与 Maven 生命周期集成,自动化执行
- ✅ 详细的日志输出,便于调试和监控
## 安装要求
- Maven 3.6.0 或更高版本
- Java 8 或更高版本
## 快速开始
### 1. 添加插件配置
在你的 `pom.xml` 中添加插件配置:
```xml
io.gitee.langle123
JarLibrary-maven-plugin
1.0.1
run
${project.build.outputDirectory}/library
com.example
example-artifact
```
### 2. 执行插件
运行以下命令执行插件:
```bash
mvn jarlibrary:run
```
或者在执行打包命令时自动运行:
```bash
mvn package
```
插件会在 `generate-resources` 阶段自动执行,将依赖复制到指定目录并生成哈希清单。
## 插件目标
### run 目标
主要目标,用于将依赖 JAR 包复制到指定目录并生成 SHA-256 哈希清单。
**参数说明:**
| 参数 | 类型 | 默认值 | 说明 |
|--------------------|------------------------|----------------------------------------------------|----------------|
| `libraryPath` | String | `${project.build.outputDirectory}/library` | 依赖 JAR 包的输出目录 |
| `dependenciesPath` | String | `${project.build.outputDirectory}/library/library` | 哈希清单文件路径 |
| `filters` | List\ | 无 | 黑名单配置,排除列表中的依赖 |
**执行流程:**
1. 扫描项目的所有依赖
2. 过滤掉 `pom` 类型、`provided` 和 `test` 作用域的依赖
3. 如果配置了 `filters`,排除在黑名单中的依赖
4. 复制符合条件的 JAR 文件到 `libraryPath`
5. 计算每个文件的 SHA-256 哈希值
6. 将哈希值和文件名写入清单文件
### help 目标
显示插件帮助信息。
```bash
mvn jarlibrary:help
```
## 配置示例
### 基本配置(复制所有依赖)
```xml
io.gitee.langle123
JarLibrary-maven-plugin
1.0.1
run
```
此配置会复制所有运行时依赖(排除 provided 和 test)。
### 黑名单配置(排除指定依赖)
```xml
io.gitee.langle123
JarLibrary-maven-plugin
1.0.1
run
junit
junit
org.slf4j
slf4j-simple
```
此配置会复制所有依赖,但排除 `junit` 和 `slf4j-simple`。
### 自定义输出路径
```xml
io.gitee.langle123
JarLibrary-maven-plugin
1.0.1
run
${project.build.directory}/my-libs
${project.build.directory}/my-libs/checksums.sha256
```
输出结构:
```
target/
└── my-libs/
├── dependency1.jar
├── dependency2.jar
└── checksums.sha256
```
## 输出说明
### 目录结构
插件执行后会生成以下结构:
```
${project.build.outputDirectory}/
└── library/
├── spring-core-5.3.20.jar
├── spring-context-5.3.20.jar
├── commons-io-2.11.0.jar
└── library # 哈希清单文件
```
### 哈希清单文件格式
清单文件(`library`)包含每行一个依赖的 SHA-256 哈希值:
```
a1b2c3d4e5f6... spring-core-5.3.20.jar
b2c3d4e5f6g7... spring-context-5.3.20.jar
c3d4e5f6g7h8... commons-io-2.11.0.jar
```
格式:` <文件名>`
### 日志输出
**Info 级别:**
```
[INFO] Starting JarLibrary plugin execution...
[INFO] Library path: /path/to/library
[INFO] Dependencies file: /path/to/library/library
[INFO] JarLibrary plugin completed. Processed: 15, Skipped: 8
```
**Debug 级别(使用 `-X` 参数):**
```
[DEBUG] Skipping provided scope artifact: javax.servlet:servlet-api
[DEBUG] Filtered out artifact: junit:junit
[DEBUG] Processed: org.springframework:spring-core -> spring-core-5.3.20.jar
```
## 工作原理
1. **依赖扫描**:插件在 Maven 构建的 `generate-resources` 阶段执行
2. **依赖过滤**:
- 排除 `pom` 类型的依赖
- 排除 `provided` 和 `test` 作用域的依赖
- 如果配置了 `filters`,排除黑名单中的依赖
3. **文件复制**:将符合条件的 JAR 文件复制到 `libraryPath` 目录
4. **哈希计算**:使用 SHA-256 算法计算每个文件的哈希值
5. **清单生成**:将哈希值和文件名写入清单文件
6. **打包集成**:Maven 在后续打包阶段会将整个输出目录包含进去
## 常见用途
### 1. 独立应用打包
将应用及其依赖一起打包,方便部署:
```bash
java -cp "lib/*" com.example.Main
```
### 2. 依赖完整性验证
使用生成的哈希清单验证依赖是否被篡改:
```bash
sha256sum -c library
```
### 3. 离线环境部署
在有网络的环境生成依赖包,然后部署到离线环境。
### 4. 自定义类加载器
配合自定义类加载器,从指定目录加载依赖。
## 注意事项
⚠️ **重要提示:**
1. **过滤器逻辑**:`filters` 是黑名单机制,配置后会排除列表中的依赖
2. **文件覆盖**:如果多个依赖的文件名相同,后面的会覆盖前面的
3. **作用域限制**:默认只处理 `compile` 和 `runtime` 作用域的依赖
4. **目录创建**:插件会自动创建必要的目录,无需手动创建
## 故障排查
### 问题1:没有依赖被复制
**原因**:可能所有依赖都被排除了
**解决**:检查 `filters` 配置,确认没有误排除所有依赖
### 问题2:找不到某些依赖
**原因**:依赖可能是 `provided` 或 `test` 作用域
**解决**:这些依赖会被自动跳过,如需复制请修改依赖的作用域
### 问题3:哈希清单文件路径不合理
**原因**:默认路径是 `${project.build.outputDirectory}/library/library`
**解决**:通过 `dependenciesPath` 参数自定义路径
## 许可证
本项目采用 Apache License 2.0 许可证 - 查看 [LICENSE](https://www.apache.org/licenses/LICENSE-2.0.txt) 文件了解详情。
## 联系方式
**作者**: langle__
**邮箱**: 1097627449@qq.com
**项目地址**: [https://gitee.com/langle123/JarLibrary-maven-plugin](https://gitee.com/langle123/JarLibrary-maven-plugin)
## 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
---
**Made with ❤️ by langle__**