# 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__**