maven使用systemPath方式加载本地jar的实现

 更新时间:2025年06月10日 09:18:22   作者:xixingzhe2  
本文介绍Maven通过systemPath加载本地第三方JAR的方法,需配置依赖和插件以确保打包和运行,具有一定的参考价值,感兴趣的可以了解一下

1、背景

在对接第三方厂商时,会提供对应jar,maven公开仓库上没有发布,提供的处理方法。

  • 上传的公司私服。
  • systemPath方式加载本地jar。

本文要讲的就是使用systemPath方式加载本地jar。

2、使用

示例如下

2.1 下载第三方jar

jar-local-1.0.0.jar

jar中提供了MyStringUtils.generateUUID方法。

2.2 项目引入

2.2.1 引入依赖

<dependency>
    <groupId>com.ybw</groupId>
    <artifactId>jar-local</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/jar-local-1.0.0.jar</systemPath>
</dependency>
  • groupId:此名称可自定义,com.ybw为自定义的名称;
  • artifactId:此名称可自定义,jar-local为自定义的名称,不过这个最好与加载的jar(jar-local-1.0.0.jar)名称保持一致。
  • version:此版本号可自定义,不过好与加载的jar保持一致。
  • scope:使用system。
  • systemPath:本地jar文件你放在系统文件的目录,${project.basedir}表示项目根目录。lib和src为同级目录。

 2.2.2 插件配置

spring boot项目

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <configuration>
                <mainClass>com.ybw.jar.load.local.JarLocalApplication</mainClass>
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <executions>
                <execution>
                    <id>repackage</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<includeSystemScope>true</includeSystemScope>作用:

代表maven打包时会将外部引入的jar包(比如在根目录下或resource文件下新加外部jar包)打包到项目jar,在服务器上项目才能运行,不加此配置,本地可以运行,因为本地可以再lib下找到外部包,但是服务器上jar中是没有的。

2.2.3 使用本地jar方法

已可以正常使用MyStringUtils.generateUUID()

package com.ybw.jar.load.local.utils;

import com.ybw.jar.local.utils.MyStringUtils;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;

/**
 * 依赖测试
 *
 * @author ybw
 * @version V1.0
 * @className MyStringUtilsTest
 * @date 2022/4/24
 **/
@Slf4j
public class MyStringUtilsTest {

    @Test
    public void print() {
        log.info("{}", MyStringUtils.generateUUID());
    }
}

3、扩展(scope属性)

依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中。

  • compile (编译)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。

  • provided (已提供)

provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。

  • runtime (运行时)

runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

  • test (测试)

test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

  • system (系统)

system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构建应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(建议尽量去从公共或定制的 Maven 仓库中引用依赖)。

  • import(导入)

import 只能在pom文件的<dependencyManagement>中使用,从而引入其他的pom文件中引入依赖,如:在Spring boot 项目的POM文件中,我们可以通过在POM文件中继承 Spring-boot-starter-parent来引用Srping boot默认依赖的jar包,如下:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.6.7</version>
</parent>

但是,通过上面的parent继承的方法,只能继承一个 spring-boot-start-parent。实际开发中,用户很可能需要继承自己公司的标准parent配置,这个时候可以使用 scope=import 来实现多继承。代码如下:

<dependencyManagement>
	 <dependencies>
	     <dependency>
	         <!-- Import dependency management from Spring Boot -->
	         <groupId>org.springframework.boot</groupId>
	         <artifactId>spring-boot-dependencies</artifactId>
	         <version>2.6.7</version>
	         <type>pom</type>
	         <scope>import</scope>
	    </dependency>
	</dependencies>
</dependencyManagement>

通过上面方式,就可以获取spring-boot-dependencies.2.6.7.pom文件中dependencyManagement配置的jar包依赖。如果要继承多个,可以在dependencyManagement中添加,如:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.6.7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

到此这篇关于maven使用systemPath方式加载本地jar的实现的文章就介绍到这了,更多相关maven 加载本地jar内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springSecurity自定义登录接口和JWT认证过滤器的流程

    springSecurity自定义登录接口和JWT认证过滤器的流程

    这篇文章主要介绍了springSecurity自定义登陆接口和JWT认证过滤器的相关资料,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • @MapperScan注解与@Mapper注解的使用

    @MapperScan注解与@Mapper注解的使用

    这篇文章主要介绍了@MapperScan注解与@Mapper注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 详解Spring Boot读取配置文件与配置文件优先级

    详解Spring Boot读取配置文件与配置文件优先级

    这篇文章主要介绍了详解Spring Boot读取配置文件与配置文件优先级,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Java 和 Scala 如何调用变参

    Java 和 Scala 如何调用变参

    这篇文章主要介绍了Java 和 Scala 如何调用变参,帮助大家更好的理解和学习Java与Scala,感兴趣的朋友可以了解下
    2020-09-09
  • Java如何获取List<String>中的String详解

    Java如何获取List<String>中的String详解

    工作了这么长时间了,一直没有记录的习惯,以至于导致我即便是查过的东西总会忘记,下面这篇文章主要给大家介绍了关于Java如何获取List<String>中String的相关资料,需要的朋友可以参考下
    2022-02-02
  • Java如何生成随机数不了解下吗

    Java如何生成随机数不了解下吗

    我们在学习 Java 基础时就知道可以生成随机数,可以为我们枯燥的学习增加那么一丢丢的乐趣,本文就来和大家介绍Java生成随机数的常用方法,需要的可以参考下
    2023-08-08
  • Java中Tuple的功能及使用详解

    Java中Tuple的功能及使用详解

    Java中的Tuple是一种非常有用的数据结构,它可以让开发者在处理多个数据元素时更加方便和高效,通过Tuple,我们可以将多个变量打包成一个对象,从而减少了代码量,提高了代码可读性,这篇文章主要介绍了Java中Tuple的功能及使用场景,需要的朋友可以参考下
    2024-01-01
  • spring中向一个单例bean中注入非单例bean的方法详解

    spring中向一个单例bean中注入非单例bean的方法详解

    Spring是先将Bean对象实例化之后,再设置对象属性,所以会先调用他的无参构造函数实例化,每个对象存在一个map中,当遇到依赖,就去map中调用对应的单例对象,这篇文章主要给大家介绍了关于spring中向一个单例bean中注入非单例bean的相关资料,需要的朋友可以参考下
    2021-07-07
  • Java实现数据库图片上传与存储功能

    Java实现数据库图片上传与存储功能

    在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助
    2025-03-03
  • JAVA 对接腾讯云直播的实现

    JAVA 对接腾讯云直播的实现

    这篇文章主要介绍了JAVA 对接腾讯云直播的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论