探秘Maven神奇力量:使用systemPath加载外部JAR包

复制代码

😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: 探秘Maven神奇力量:使用systemPath加载外部JAR包
⏱️ @ 创作时间: 2023年08月20日

前言

Maven构建项目时,通常会使用依赖管理功能来管理项目依赖的JAR包。Maven会自动从Maven仓库中下载并管理这些依赖,从而简化了项目的构建和管理过程。但有时候,可能会遇到一些特殊情况,需要引入本地或系统中不存在于Maven仓库的JAR包。

为了解决这个问题,Maven提供了systemPath属性,允许开发者将本地文件系统中的JAR包引入到项目中。通过指定systemPath属性,Maven会在构建项目时,从指定路径加载该JAR包而不是从Maven仓库下载。这使得开发者可以在项目中使用特定版本的JAR包,而无需将其上传到Maven仓库。

使用systemPath方式加载JAR包存在一些潜在问题:

  • 不推荐使用:systemPath方式不被推荐,因为它会导致项目的可移植性下降。在另一台计算机上构建项目时,可能无法找到指定的JAR包路径,从而导致构建失败或运行时错误。
  • 维护困难:在项目中引入大量使用systemPath方式加载的JAR包,会增加项目的维护难度。当需要更新JAR包或切换到其他环境时,需要手动处理路径问题。
  • 建议使用本地仓库或私有仓库:为了避免systemPath方式的不便,推荐将本地需要的JAR包上传到本地Maven仓库或私有仓库,然后通过依赖管理来引用它们。

使用

在开发工程中,有些jar是自己开发的,比如:封装的工具类,在其他项目想要引入时就需要maven坐标,如果引入maven坐标则每个开发者都需要有源码然后通过mvn安装到本地才能产生maven坐标;或者导入到lib文件夹下再使用IDEA进行构建。这些方式都比较麻烦需要开发者进行额外的操作。所以通过Maven的systemPath方式加载外部jar包的方式进行很好的解决该问题

比如我有一个叫做common-util的工程,该工程源码的<groupId>com.test.common,<version>1.0,如下:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    ......
    <groupId>com.test.common</groupId>
    <artifactId>common-util</artifactId>
    <version>1.0</version>
    <name>common-util</name>
    ......
</project>

步骤:

1、进入common-util工程,通过mvn命令进行package打包

2、将打包后的common-util-1.0.jar拷贝到其他需要的resources下的lib文件夹中

3、pom引入common-util-1.0.jar包,代码如下:

xml 复制代码
<dependency>
   	 <!--common-util包源码的groupId地址-->
     <groupId>com.test.common</groupId>
     <artifactId>common-util</artifactId>
     <!--common-util包源码的version-->
     <version>1.0</version>
     <scope>system</scope>
     <systemPath>${project.basedir}/src/main/resources/lib/common-util-1.0.jar</systemPath>
</dependency>
复制代码
相关推荐
大数据专业的小沉12 小时前
解决PyCharm 2024.1 打开项目后持续卡顿,UI 无响应,编辑延迟明显
ide·python·pycharm
郝学胜_神的一滴14 小时前
Python 高级编程 027:四大推导式全攻略
python·pycharm
不老刘1 天前
【Java入门】Java服务部署方式全景对比:从java -jar到K8s
java·kubernetes·jar
前进再前进1 天前
PyCharm 连接 HPC 时 Path to conda 一直转圈:一次 Remote Development 解决方案记录
pycharm
老马历写记1 天前
Maven POM 依赖管理总结
java·maven·system·pom·optional
Swift社区2 天前
Python 开发环境怎么选?PyCharm、VS Code、Trae 谁更适合 AI 开发?
人工智能·python·pycharm
SMF19192 天前
【PyCharm】让 PyCharm 使用 .venv 虚拟环境
ide·python·pycharm
维度攻城狮3 天前
PyCharm 使用 DevContainer 开发:打造一致、隔离、高效的开发环境
ide·python·pycharm·devcontainer
赵广陆3 天前
RAG进阶
pycharm·langchain
持敬chijing4 天前
超详细!Pycharm的激活安装与使用教程
python·pycharm