探秘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>
复制代码
相关推荐
QQ_19632884755 天前
Python-flask框架西山区家政服务评价系统网站设计与开发-Pycharm django
python·pycharm·flask
逍遥德5 天前
Maven教程.02-基础-pom.xml 使用标签大全
java·后端·maven·软件构建
zxfBdd5 天前
Error:scala: No ‘scala-library*.jar‘ in Scala compiler classpath in Scala SDK
大数据·scala·jar
逍遥德5 天前
Maven教程.01- settings.xml 文件<profile>使用详解
xml·java·maven
逍遥德6 天前
Maven教程.04-如何阅读Maven项目
java·maven
逍遥德6 天前
Maven教程.03-如何阅读pom.xml文件
xml·java·后端·maven
塔中妖6 天前
Windows 安装 Maven 详细教程(含镜像与本地仓库配置)
java·windows·maven
成为你的宁宁6 天前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven
没有bug.的程序员6 天前
依赖治理之巅:Maven 与 Gradle 依赖树分析内核、冲突判定博弈与工程自愈实战指南
java·gradle·maven·依赖治理·冲突判定·依赖树
三无少女指南7 天前
Spring Boot项目中Maven编译参数source、target与release的区别及配置实践
java·spring boot·maven