Maven项目引用本地jar涉及scope和systemPath配置

Scope属性

XML 复制代码
<dependency>
    <groupId>com.hik</groupId>
    <artifactId>examples</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/examples.jar</systemPath>
</dependency>

先在pom文件中将依赖换成读取本地:<systemPath>

然后通过<scope>标签控制该jar包(依赖)的生存周期:

1. ‌**compile(默认作用域)**‌

  • 可用阶段‌:编译、测试、运行
  • 传递性‌:会传递给依赖项目
  • 打包行为‌:包含在项目构建的输出中(如 JAR/WAR 文件)
  • 典型场景‌:项目核心依赖(如 Spring Framework、日志库)
XML 复制代码
<dependency>
    <groupId>com.hik</groupId>
    <artifactId>examples</artifactId>
    <version>1.0.0</version>
    <scope>compile</scope> <!-- 可省略 -->
    <systemPath>${project.basedir}/lib/examples.jar</systemPath>
</dependency>

2. ‌provided

  • 可用阶段‌:编译、测试
  • 传递性‌:不会传递
  • 打包行为 ‌:‌不包含‌在构建输出中
  • 典型场景‌:容器提供的依赖(如 Servlet API、JavaEE API)
XML 复制代码
<dependency>
    <groupId>com.hik</groupId>
    <artifactId>examples</artifactId>
    <version>1.0.0</version>
    <scope>provided</scope>
    <systemPath>${project.basedir}/lib/examples.jar</systemPath>
</dependency>

3. ‌runtime

  • 可用阶段‌:测试、运行
  • 传递性‌:会传递
  • 打包行为‌:包含在构建输出中
  • 典型场景‌:运行时需要的驱动或实现(如 JDBC 驱动)
XML 复制代码
<dependency>
    <groupId>com.hik</groupId>
    <artifactId>examples</artifactId>
    <version>1.0.0</version>
    <scope>runtime</scope>
    <systemPath>${project.basedir}/lib/examples.jar</systemPath>
</dependency>

4. ‌test

  • 可用阶段‌:仅测试阶段
  • 传递性‌:不会传递
  • 打包行为‌:不包含在构建输出中
  • 典型场景‌:测试框架(JUnit、Mockito)
XML 复制代码
<dependency>
    <groupId>com.hik</groupId>
    <artifactId>examples</artifactId>
    <version>1.0.0</version>
    <scope>test</scope>
    <systemPath>${project.basedir}/lib/examples.jar</systemPath>
</dependency>

5. ‌**system(谨慎使用)**‌

  • 可用阶段‌:编译、测试(需手动配置运行)
  • 传递性‌:不会传递
  • 打包行为‌:默认不包含,需特殊配置
  • 典型场景‌:本地特殊 JAR(无法从仓库获取)
XML 复制代码
<dependency>
    <groupId>com.hik</groupId>
    <artifactId>examples</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/examples.jar</systemPath>
</dependency>

6. ‌**import(特殊作用域)**‌

  • 可用阶段‌:仅依赖管理
  • 传递性‌:不会传递
  • 打包行为‌:不包含
  • 典型场景‌:继承其他 POM 的依赖管理
XML 复制代码
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.hik</groupId>
            <artifactId>examples</artifactId>
            <version>1.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

作用域对生命周期阶段的影响

作用域 编译 测试 运行 打包 传递依赖
compile ✔️ ✔️ ✔️ ✔️ ✔️
provided ✔️ ✔️
runtime ✔️ ✔️ ✔️ ✔️
test ✔️
system ✔️ ✔️ ⚠️* ️*

⚠️ system 作用域:运行和打包需要额外配置(如添加 <includeSystemScope>true</includeSystemScope>

最佳实践建议

  1. 避免使用 system 作用域 ‌:优先将本地 JAR 安装到仓库 (mvn install:install-file)
  2. 作用域最小化原则 ‌:使用能满足需求的最严格作用域(如能用 runtime 不用 compile
  3. provided 作用域用于容器依赖‌:防止与容器提供的库冲突
  4. test 作用域隔离测试依赖‌:减少最终包大小
  5. 使用 mvn dependency:tree 验证‌:检查依赖传递和冲突

打包扫描(jar包)

使用system引用时,<scope>,<systemPath>标签,这种方式在部署时才会出现的问题。部署到容器运行时,就会提示找不到类,因为该jar未被注入到项目lib中,需要在pom文件中增加打包扫描的配置。

需要配置 <build>

XML 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
        </plugin>
     </plugins>
     <finalName>${project.artifactId}</finalName>
</build>
相关推荐
金玉满堂@bj11 分钟前
PyCharm 中 Python 解释器的添加选项及作用
ide·python·pycharm
程序员三藏15 分钟前
如何使用Pytest进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
随心点儿1 小时前
使用python 将多个docx文件合并为一个word
开发语言·python·多个word合并为一个
不学无术の码农1 小时前
《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
开发语言·python
sleepybear11131 小时前
在Ubuntu上从零开始编译并运行Home Assistant源码并集成HACS与小米开源的Ha Xiaomi Home
python·智能家居·小米·home assistant·米家·ha xiaomi home
纪伊路上盛名在1 小时前
(鱼书)深度学习入门1:python入门
人工智能·python·深度学习
麦兜*1 小时前
Spring Boot秒级冷启动方案:阿里云FC落地实战(含成本对比)
java·spring boot·后端·spring·spring cloud·系统架构·maven
夏末蝉未鸣011 小时前
python transformers笔记(TrainingArguments类)
python·自然语言处理·transformer
德育处主任Pro1 小时前
「py数据分析」04如何将 Python 爬取的数据保存为 CSV 文件
数据库·python·数据分析
咸鱼鲸2 小时前
【PyTorch】PyTorch中数据准备工作(AI生成)
人工智能·pytorch·python