分布式文件存储系统学习之pom.xml文件

57 阅读1分钟

 今天在学习项目式发现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标签内的关键字的含义如下:

  1. compile:编译,测试,运行,打包,是默认值.
  2. test:参与测试相关工作,包括测试代码的编译和执行,不会被打包比如说junit.
  3. runtime:类似于jdbc,与compile相比.不参与项目的编译,适用于运行和测试阶段.
  4. provided:参与编译,测试,运行,但在打包时会做exclude操作.
  5. system:与provided类似,但依赖项会从本地拿,而不是中央仓库.