开发者

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

开发者 https://www.devze.com 2025-06-28 14:35 出处:网络 作者: xixingzhe2
目录1、背景2、使用2.1 下载第三方jar2.2 项目引入2.2.1 引入依赖&编程客栈nbsp;2.2.2 插件配置2.2.3 使用本地jar方法3、扩展(scope属性)1、背景
目录
  • 1、背景
  • 2、使用
    • 2.1 下载第三方jar
    • 2.2 项目引入
      • 2.2.1 引入依赖
      • &编程客栈nbsp;2.2.2 插件配置
      • 2.2.3 使用本地jar方法
  • 3、扩展(scope属性)

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

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

     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 (不是运行时)可用。它们不是传递性的,也不会被打包。

    • runtpythonime (运行时)

    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内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号