Maven核心:坐标与依赖

Maven项目的核心是pom.xml,POM(项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖。Maven的一个最大的功能是管理项目依赖,为了能自动解析每一个构件,Maven必须将它们唯一标识,这就涉及到了坐标的概念。关于坐标,大家最熟悉的定义就是来自平面几何中的,x,y轴,通过x,y轴可以确定平面中的一点。在Maven中有非常多的构件,也就是平时的jar,war文件等。以前在引入Maven以前,一个项目中要依赖各种jar包,必须到各个官网上去下载对应的jar包,引入到系统中。重复地搜索,浏览下载,花费了大量的时间。Maven可以解决这些问题,Maven定义了一组规则:任何一个构件都可以通过坐标唯一标识。

Maven坐标元素:groupId,artifactId,version,packaging,classifier。只要提供正确的坐标元素,Maven就能找到对应的构件。Maven究竟是从何处下载这些构件的呢?答案是Maven有一个内置的中央仓库,该仓库中包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去中央仓库下载。

坐标详解

Maven坐标是通过一组元素定义的,它们是groupId,artifactId,version,packaging,classifier。如下:

    <groupId>com.somnus</groupId>
    <artifactId>Spring</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>
  • groupId
    定义当前Maven项目隶属的实际项目,通常和项目所在的组织或公司存在关联。通常就是组织+项目名组成。如你的公司是mycom,项目是myapp,那么groupId为:com.mycom.myapp。
  • artifactId
    定义了当前Maven项目在组中唯一的ID,使用该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用项目名称作为artifactId作为前缀,这样的好处是方便寻找实际构件。在默认情况下,Maven生成的构件会以artifactId作为开头,如上面会生成Spring-0.0.1.jar,使用实际项目名称作为前缀,就能方便从一个lib文件夹中找到某个项目的一组构件。
  • version
    定义了Maven项目当前所处的版本。
  • packaging
    定义了Maven项目的打包方式。如果packaging为jar,最终会生成一个jar文件;如果是war,则最终生成.war文件。如果不指定,则默认是jar。
  • classifier
    该元素用来定义构件输出的一些附属构件,不能直接定义项目的classifier,附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的

Maven依赖

Maven的依赖配置,也是由基本的groupId,artifactId,version等元素组成。

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>2.5</version>
    </dependency>
     <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>2.5</version>
    </dependency>
  </dependencies>

根元素project下的dependencies可以包含一个或多个dependency元素,以声明一个或多个依赖。每个依赖可以包含的元素有:
1. groupId、artifactId、version:依赖的基本坐标,通过坐标可以找到唯一的构件。
2. type: 依赖的类型,对应与项目坐标定义的packaging,大部分情况下,该元素不需要定义,默认值为jar。
3. scope: 依赖范围。依赖范围是用来控制依赖与编译classpath,测试classpath,运行classpath的关系,有以下几种依赖范围:
1) compile: 编译依赖范围,如果没有指定,就会默认使用该依赖范围。对于编译,测试,运行都有效。
2) test: 测试依赖范围,只对测试classpath有效。
3) provided: 已提供依赖范围。对于编译和测试的classpath有效,运行时无效。
4) runtime: 运行时依赖范围。对于测试和运行时classpath有效,编译主代码时无效。

猜你喜欢

转载自blog.csdn.net/susu0510/article/details/78095680