今天在学习项目式发现maven项目的子项目引用包没有写版本号,仔细查看原项目发现,顶层模块用dependencyManagement包裹着dependecies,这样便于管理整个项目的依赖版本号,如
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<dependency>
<dependencies>
<dependencyManagement>
而子模块需要lombok包时,可以这样写
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<dependency>
而且使用了dependencyManagement标签后,子模块是必须在自己的pom.xml文件中声明需要的包,不能直接引用parent的依赖
为了避免包的冲突,控制包的适用范围,可以在子模块引入依赖时加上scope标签,比如这样:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
scope标签内的关键字的含义如下:
- compile:编译,测试,运行,打包,是默认值.
- test:参与测试相关工作,包括测试代码的编译和执行,不会被打包比如说junit.
- runtime:类似于jdbc,与compile相比.不参与项目的编译,适用于运行和测试阶段.
- provided:参与编译,测试,运行,但在打包时会做exclude操作.
- system:与provided类似,但依赖项会从本地拿,而不是中央仓库.