探秘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>
复制代码
相关推荐
沉豆4 小时前
Jmeter调用jar包中的方法,并使用返回值当请求参数
java·jmeter·jar
bing_1586 小时前
在微服务架构中,怎么搭建Maven私服
微服务·架构·maven
hmb↑6 小时前
mvnd-快速打包maven项目
java·maven
木棉软糖14 小时前
【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
java·maven·intellij-idea
桂?15 小时前
使用离线依赖解决Android Studio编译报错(下载不了jar)——笔记
笔记·android studio·jar
酷爱码1 天前
Maven 配置中绕过 HTTP 阻断机制的完整解决方案
java·http·maven
forestsea1 天前
Maven 多仓库治理与发布策略深度实践
java·maven
阿昌喜欢吃黄桃1 天前
mac安装mvnd结合idea
java·maven·idea·编译·打包·mvnd·编译打包
年老体衰按不动键盘1 天前
idea中导入maven项目的方法
java·maven·intellij-idea
辉辉健身中2 天前
Maven入门(够用)
java·maven