Java打包时,不将本地Jar打包到项目的最终 JAR 中

如果需要保留本地 JAR 依赖,但不将本地Jar其打包到项目的最终 JAR 中 (即编译时使用本地 JAR,运行时手动提供该 JAR),可以通过 Maven 的 system 范围依赖实现,这也是处理本地非仓库 JAR 的标准方式。

具体配置步骤

在 pom.xml 中按以下方式配置依赖:

复制代码
<dependencies>
    <!-- 其他依赖 -->
    
    <!-- 本地 JAR 依赖配置 -->
    <dependency>
        <groupId>com.ciphergateway</groupId> <!-- 自定义 groupId -->
        <artifactId>aoe-plugin-cg</artifactId> <!-- 自定义 artifactId -->
        <version>1.0.0</version> <!-- 自定义版本号 -->
        <scope>system</scope> <!-- 关键:system 范围表示依赖本地文件 -->
        <!-- 本地 JAR 的绝对路径或相对路径 -->
        <systemPath>${project.basedir}/lib/aoe-xx-cg.jar</systemPath>
    </dependency>
</dependencies>

配置说明

  1. scope>system</scope :这是核心配置,声明该依赖是本地系统级别的,Maven 不会从仓库下载,也不会将其打包到项目的最终 JAR/WAR 中(仅在编译和测试时使用本地文件)。

  2. systemPath 路径:

    • 推荐使用相对路径(通过 ${project.basedir} 引用项目根目录),例如 ${project.basedir}/lib/aoe-xx-cg.jar 表示 JAR 放在项目根目录的 lib 文件夹下。
    • 也可以使用绝对路径(如 D:/libs/aoe-xx-cg.jar),但相对路径更便于团队协作(需确保团队成员的项目结构一致)。

运行时注意事项

由于该 JAR 不会被打包到项目产物中,运行时必须手动提供该 JAR ,否则会报 ClassNotFoundException。有两种方式:

  1. 运行时通过 -cp 指定类路径:执行项目 JAR 时,将本地 JAR 路径加入类路径:

假设项目 JAR 是 app.jar,本地 JAR 在 ./lib 目录

java -cp "app.jar:./lib/aoe-xx-cg.jar" 主类全限定名

  1. (Windows 系统用 ; 分隔路径:java -cp "app.jar;./lib/aoe-xx-cg.jar")

  2. 将 JAR 放到 JRE 的扩展目录 :复制 JAR 到 JRE安装目录/lib/ext 下(不推荐,可能影响其他程序)。

优缺点

  • 优点:简单直接,无需将本地 JAR 上传到仓库,且不会污染项目的打包产物。
  • 缺点:依赖本地文件路径,移植性较差(需确保所有环境的本地路径都存在该 JAR)。

如果需要更好的移植性,也可以将本地 JAR 安装到本地 Maven 仓库(执行 mvn install:install-file 命令),但这样默认会被打包,需要额外配置排除(适合多人协作场景)。

相关推荐
神也畏惧菠萝12 分钟前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
言乐626 分钟前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame
quantdash_cc33 分钟前
ETF 行情数据清洗实战:字段语义拆解、标的池整理与五个校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
小熊恋旧35 分钟前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合36 分钟前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J36 分钟前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
will_net1 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
威哥爱编程1 小时前
Python 智能体开发实战 05:一问教材内容它就编?先把答案从你自己的资料里检索出来
python·agent
java_prinln1 小时前
RAG 面试题介绍
python·agent
威哥爱编程1 小时前
Python 智能体开发实战 06:一个函数里塞了八百行?用状态机把批改流程拆成能回退的步骤
python·agent