关于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>