😊 @ 作者: 一恍过去


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


⏱️ @ 创作时间: 2023年08月20日


maven scope system什么意思_maven

前言

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>

maven scope system什么意思_jar_02