Maven入门(二)pom.xml和核心概念

一、pom.xml文件说明

1、pom意思就是project object model。

2、pom.xml包含了项目构建的信息,包括项目的信息、项目的依赖等。

3、pom.xml文件是可以继承的,大型项目中,子模块的pom.xml一般都会继承于父模块的pom.xml

举例:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>myapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>myapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

pom.xml文件的节点元素说明:

    <project>       pom文件的顶级节点
    <modelVersion>    object model版本,对Maven2和Maven3来说,只能是4.0.0 
    <groupId>        项目创建组织的标识符,一般是域名的倒写
    <artifactId>      定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目
    <version>        当前项目的版本,SNAPSHOT,表示是快照版本,在开发中

    <packaging>      打包的方式,有jar、war、ear等
    <name>        项目的名称
    <url>        项目的地址

    <properties>      属性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <dependencies>     构建项目依赖的jar

其中由groupId、artifactId和version唯一的确定了一个项目坐标

二、Maven坐标

 
 
 
 
 
 

2.1、什么是坐标?

  在平面几何中坐标(x,y)可以标识平面中唯一的一点。

2.2、Maven坐标主要组成

  • groupId: 组织标识(包名)
  • artifactId:项目名称
  • version:  项目的当前版本
  • packaging:项目的打包方式,最为常见的jar和war两种
<groupId>com.mycompany.app</groupId>
<artifactId>myapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

2.3、Maven为什么使用坐标?

  • Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。
  • 拥有了统一规范,就可以把查找工作交给机器。

三、依赖管理

3.1、依赖配置

  依赖配置主要包含如下元素: 

<!--添加依赖配置-->
    <dependencies>
        <!--项目要使用到junit的jar包,所以在这里添加junit的jar包的依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
        <!--项目要使用到Hello的jar包,所以在这里添加Hello的jar包的依赖-->
        <dependency>
            <groupId>me.gacl.maven</groupId>
            <artifactId>Hello</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>    
    </dependencies>

3.2、依赖范围

  依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
    1.compile 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
    2.test:测试依赖范围。只对于测试classpath有效
    3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
    4.runtime:运行时提供。例如:jdbc驱动

    4.runtime:运行时提供。例如:jdbc驱动

3.3、传递性依赖

  MakeFriends.jar直接依赖于HelloFriends.jar,而HelloFriends.jar又直接依赖于Hello.jar,那么MakeFriends.jar也依赖于Hello.jar,这就是传递性依赖,只不过这种依赖是间接依赖,如下图所示:

      

四、仓库管理

4.1、Maven仓库

  用来统一存储所有Maven共享构建的位置就是仓库(放jar包的地方)

4.2、Maven仓库布局

  根据Maven坐标定义每个构建在仓库中唯一存储路径,大致为:groupId/artifactId/version/artifactId-version.packaging

4.3、仓库的分类

4.3.1、本地仓库:本机jar包的位置

  每个用户只有一个本地仓库,默认是在~/.m2/repository/,~代表的是用户目录,位置可以修改

4.3.2、远程仓库

  1、中央仓库:Maven默认的远程仓库,URL地址:http://search.maven.org/

  2、私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

  

五、生命周期

5.1、何为生命周期?

  Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

5.2、Maven三大生命周期

  Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",这三套生命周期分别是:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  3. Site Lifecycle 生成项目报告,站点,发布站点。

六、常用命令

mvn install

安装包至本地仓库,以备本地的其它项目作为依赖使用

mvn clean 清理上一次构建生成的target文件

mvn compile

编译项目的源代码

mvn test

使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布

mvn package

将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR

原文:https://www.cnblogs.com/limaosheng/p/8631616.html

      https://www.cnblogs.com/xdp-gacl/p/4051819.html

2.1、什么是坐标?

  在平面几何中坐标(x,y)可以标识平面中唯一的一点。

2.2、Maven坐标主要组成

  • groupId: 组织标识(包名)
  • artifactId:项目名称
  • version:  项目的当前版本
  • packaging:项目的打包方式,最为常见的jar和war两种
<groupId>com.mycompany.app</groupId>
<artifactId>myapp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

2.3、Maven为什么使用坐标?

  • Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范。
  • 拥有了统一规范,就可以把查找工作交给机器。

三、依赖管理

3.1、依赖配置

  依赖配置主要包含如下元素: 

<!--添加依赖配置-->
    <dependencies>
        <!--项目要使用到junit的jar包,所以在这里添加junit的jar包的依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
        <!--项目要使用到Hello的jar包,所以在这里添加Hello的jar包的依赖-->
        <dependency>
            <groupId>me.gacl.maven</groupId>
            <artifactId>Hello</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>    
    </dependencies>

3.2、依赖范围

  依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
    1.compile 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
    2.test:测试依赖范围。只对于测试classpath有效
    3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
    4.runtime:运行时提供。例如:jdbc驱动

    4.runtime:运行时提供。例如:jdbc驱动

3.3、传递性依赖

  MakeFriends.jar直接依赖于HelloFriends.jar,而HelloFriends.jar又直接依赖于Hello.jar,那么MakeFriends.jar也依赖于Hello.jar,这就是传递性依赖,只不过这种依赖是间接依赖,如下图所示:

      

四、仓库管理

4.1、Maven仓库

  用来统一存储所有Maven共享构建的位置就是仓库(放jar包的地方)

4.2、Maven仓库布局

  根据Maven坐标定义每个构建在仓库中唯一存储路径,大致为:groupId/artifactId/version/artifactId-version.packaging

4.3、仓库的分类

4.3.1、本地仓库:本机jar包的位置

  每个用户只有一个本地仓库,默认是在~/.m2/repository/,~代表的是用户目录,位置可以修改

4.3.2、远程仓库

  1、中央仓库:Maven默认的远程仓库,URL地址:http://search.maven.org/

  2、私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

  

五、生命周期

5.1、何为生命周期?

  Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

5.2、Maven三大生命周期

  Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",这三套生命周期分别是:

  1. Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
  2. Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
  3. Site Lifecycle 生成项目报告,站点,发布站点。

六、常用命令

猜你喜欢

转载自www.cnblogs.com/dongtian-blogs/p/10800057.html