maven学习笔记——坐标和依赖

时间:2020-11-30 21:37:36

1、maven坐标的元素包括groupId、artifactId、version、packaging、classifer。只要我们提供正确的坐标元素,maven就能找到对应的构件。

      groupId:定义当前maven项目隶属的实际项目。(必须的)

      artifactId:该元素定义实际项目中的一个maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀,比如上例中的artifactId是nexus-indexer,使用了实际项目名nexus作为前缀,这样做的好处是方便寻找实际构件。在默认情况下,maven生成的构件,其文件名会以artifactId作为开头,如nexus-indexer-2.0.0.jar,使用实际项目名称作为前缀之后,就能方便从一个lib文件夹中找到某个项目的一组构件。(必须的)

      version: 该元素定义maven项目当前所处的版本。(必须的)

      packaging:该元素定义maven项目打包方式。默认值是jar。

      classifier:该元素用来帮助定义构建输出的一些附属构件。

2、maven的依赖管理

      资源文件位于src/main/resources/下

      依赖的配置:

            <project>

              ...

              <dependencies>

                <dependency>

                  <groupId>...</groupId>

                  <artifactId>...</artifactId>

                  <version>...</version>

                  <type>...</type>

                  <scope>...</scope>

                  <optional></optional>

                  <exclusions>

                    <exclusion>

                    ...

                    </exclusion>

                 </exclusions>

               </dependency>

               ...

            </dependencies>

            ...

          </project>

     groupId、artifactId、version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,maven根据坐标才能找到需要的依赖。

     type:依赖的类型,对应于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值为jar。

     scope:依赖的范围。

     optional:标记依赖是否可选。

     exclusions:用来排除传递性依赖。

3、依赖范围

     maven在编译项目主代码的时候需要使用一套classpath。

    对与元素scope来说,

    compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的maven依赖,对于编译、测试、运行三种classpath都有效。

    test:测试依赖范围。使用此依赖范围的maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此依赖。

    provided:已提供依赖范围。使用此依赖范围的maven依赖,对于编译和测试classpath有效,但在运行时无效。

    runtime:运行时依赖范围。使用此依赖范围的maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。

    system:系统依赖范围。该依赖与3中classpath的关系,和provided依赖范围完全一致。但使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。

    import:导入依赖范围。该依赖范围不会对3种classpath产生实际的影响。

4、传递性依赖

    maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。