关于maven中引入本地jar方式

关于maven中引入本地jar方式

通常,项目的模块之间,会使用maven打成jar到本地仓库或项目仓库,然后各个模块再进行引用,但在一些特殊情况,模块直接引入本地系统jar包.

1 maven的引入简介

以junit测试jar包为例:

        <!--导入junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

通常pom.xml文件中,引入的jar使用三个基本元素来定义:

元素名称 说明
groupId 对应仓库中一级或多级目录
artifactId 对应仓库中一级目录
version 对应仓库中一级目录
  • groupId:表示一个公司,组织,团体反过来的域名
  • artifactId:表示项目名或模块名
  • version:每个版本号

scope表示jar包依赖范围

Maven在执行过程中,有三种不同的classpath,运行Java代码时,使用不同的classpath类路径下的jar包执行.

classpath范围 理解为
编译类路径 程序在编译的时候使用的类路径,理解为main目录下的java代码可用
测试类路径 程序在测试的时候使用的类路径,理解为test目录下的java代码可用
运行时类路径 程序在执行过程中使用的类路径,理解为target目录下的字节码可用

scope标签指定jar的依赖范围,从上面三种类路径中的一种或多种选取, 默认为三种都可以使用,即compile类型.

依赖范围 编译类路径 测试类路径 运行时类路径
compile Y Y Y
provided Y Y -
runtime - Y Y
test - Y -
system Y Y -

说明:

  • compile 表示jar包在项目的编译,测试,运行都需要依赖,即项目打包,需要带上.
  • provided 表示jar包在编译,测试时,需要使用,在运行时,由其他的容器来提供.项目打包时,可以不带上.
  • runtime 表示jar包在测试,运行时需要使用.不需要进行编译,可以直接使用.
  • test 表示jar包只在测试阶段使用,如单元测试junit包
  • system和provided的使用相同,但是system类型不会从maven仓库中获取,而是从项目本地文件中获取,所以要配合systemPath一起使用,否则会报错.(systemPath表示本地系统路径)

system使用案例:

<dependency>
    <groupId>com.cf</groupId>
    <artifactId>demo-provide</artifactId>
    <version>1.1</version>
    <scope>system</scope>
    <systemPath>${basedir}/src/main/resources/lib/demo-provide-1.1.jar</systemPath>
</dependency>

猜你喜欢

转载自blog.csdn.net/ABestRookie/article/details/121181393