😊 @ 作者: 一恍过去
🎉 @ 主题: 探秘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 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
包,代码如下:
<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>