Maven 学习笔记


Maven 的基础概念:

*  Maven 的介绍:
*      Maven 是 Apache 旗下一个开源项目管理工具,他是采用纯 java 编写的,它采用了一种被称之为
*      Project Object Model(POM:项目对象模型)的概念来管理项目,所有的项目配置信息都被定义在
*      一个叫做 pom.xml 的文件中,通过该文件 Maven 可以管理项目的整个生命周期,包括清除、编译、
*      测试、报告、打包、部署等。目前 Apache 下绝大多数项目都已采用 Maven 进行管理,而 Maven
*      本身还支持多种插件,可以更方便更灵活的控制项目,可以让开发人员花费更多的精力在业务功能上,
*      而不是把时间浪费在 jar 包的管理,和项目的部署上。
*
*  Maven 能解决的问题:
*      软件开发中遇到的问题:
*      1、jar 包的依赖和管理:
*          项目中有很多 jar 包,可能会存在下面的几个问题:
*              不能确定 jar 包的完全正确性;
*              不同技术框架版本的管理;
*              jar 包的依赖关系;
*      2、项目的自动构建:
*          软件开发:可行性分析、需求分析、软件设计、软件开发、发布、运维;
*          软件构建:软件已经开发完毕,需要构建成一个产品进行发布;
*          构建步骤(也可以叫做软件构建的生命周期):
*              清除-->编译-->测试-->报告-->打包(jar/war)-->安装-->部署到远程;
*      Maven 就是用来解决上面的问题的,即对 jar 包的管理,和对项目的构建;
*      maven 可以通过一个命令实现自动构建软件项目(具体命令下面介绍);
*
*  Maven 与 ant、svn 的区别:
*      1、maven 与 ant 之间的区别:
*          都是软件构建工具、软件管理工具,maven 比 ant 更加强大,已经取代了 ant;
*          ant 只能用来进行软件项目的构建;
*      2、maven 与 svn 的区别:
*          maven 是一种软件构建工具,是软件已经开发完毕,对软件进行构建、部署 和 发布;
*          svn 是版本控件工具,是一种团队协同开发工具;
*              svn 也有一个仓库,功能是:
*                  1、保存软件项目的源码;
*                  2、历史版本的备份;
*                  3、每一次版本的修改情况;
*
*  Maven 是一个工具,是一个软件,需要先从官网下载下来;
*  我下载的是 apache-maven-3.6.1-bin.zip

 

Maven 软件目录的介绍:

1、bin:存放一些 maven 可执行的命令(比如 mvn 等);

2、boot:里面只有一个文件 plexus-classworlds-2.6.0.jar;

        该文件是 jar 包下载引擎,即 maven 就是通过该文件进行 jar 包下载的;

        既可以下载项目中依赖的 jar 包,也可以下载 maven 进行软件构建的插件(比如清除插件、编译插件、打包插件等);

        注意:maven 默认情况下是没有集成这些插件的,使用的时候需要自行下载;

3、conf:里面有一个配置文件 settings.xml,用于配置本地仓库地址;

        maven 默认配置的本地仓库地址为 ${user.home}/.m2/repository

        如果不想把 maven 下载的 jar 包放在默认的仓库地址中,可以自己手动配置 maven 仓库地址,如下所示:

        项目中使用 maven 管理 jar 包,会先到 maven 本地仓库中查找是否有需要的 jar 包,如果有,就直接在项目中使用;

        如果在 maven 本地仓库中没有找到项目需要的 jar 包,maven 会到中心仓库中把需要的 jar 包下载到本地仓库中;

        maven 中心仓库是面向全球的,里面有所有的 jar 包,以及对应的各个版本。

4、lib:存放一些共享库,maven 软件依赖的 jar 包;

 

Maven 环境变量的配置:

测试环境变量是否配置成功:maven -v

 

在 IntelliJ IDEA 上配置 maven:

如果 IDEA 已经打开了一个项目,在 File->Settings->Build, Execution, Deployment->Maven 下配置的 maven,那么只在当前项目有效;即创建新的项目后,maven 配置又会恢复为默认值;

打开项目的情况下,永久配置 maven 的方法是在 File->Other Settings->Settings for new Projects->Build, Execution, Deployment->Maven 下进行配置;

我用的是 IDEA 2018.3,是上面那样配置的;有些版本是下面这样配置的:

 

使用 IntelliJ IDEA 创建 maven 项目:

创建完成的项目结构为:

src/main/java:存放的是项目中的源码文件;

src/main/resources:存放的是资源文件,或者项目的配置文件;

src/test/java:存放的是项目中用于测试的源码文件;

src/test/resources:存放的是测试用的资源文件,或配置文件;

target:项目构建后(编译、打包、发布)后,会将生产的文件存放在这个目录;这个目录是自动生成的;

pom.xml:Project Object Model,项目对象模型,是 maven 的核心配置文件;

MavenDemo.java 类:

package com.maven.demo;

public class MavenDemo {
    public String getString(){
        return "hello maven";
    }
}

MavenTest.java 类:

package com.maven.demo;

import org.junit.Test;

public class MavenTest {
    @Test
    public void test(){
        MavenDemo demo = new MavenDemo();
        String str = demo.getString();
        System.out.println(str);
    }
}

pom.xml 依赖了一个 junit:

<?xml version="1.0" encoding="UTF-8"?>
<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.maven.demo</groupId>
    <artifactId>mavendemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 声明 jar 包的依赖,依赖的是 junit4.12 的 jar 包 -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

</project>

 

使用 Maven 命令对软件项目进行构建(生命周期):

在 IDEA 自带的 Terminal 终端下执行命令:

注意:默认情况下 maven 是没有集成构建的插件的,执行下面的命令时,maven 会自动下载对应的插件(有些插件 IDEA 会自动帮我们下载,而有些插件,在我们使用的时候才会下载);

1、编译:通过 mvn compile 命令执行(第一次执行时会自动下载 maven 的编译插件),生成 classes 字节码文件;

2、测试:通过 mvn test 命令执行,会自动执行 src/test/java 下的测试类;

3、打包:通过 mvn package 命令执行,将当前项目打包生成一个 jar 文件;

4、安装:通过 mvn install 命令执行,将 jar 包安装到本地仓库,供别的项目调用;

5、清除:通过 mvn clean 命令执行,删除 target 目录,及其下的字节码文件;

6、验证:通过 validate 命令执行,验证项目是否正确,并且所有必须信息都是可用的;

7、检查:通过 verify 命令执行,对集成测试的结果进行检查,以保证质量达标;

8、发布(部署):通过 mvn deploy 命令执行,将当前项目发布到中央仓库,或者私服(私有服务器)中,供其他人调用。

9、生成站点:通过 mvn site 命令执行,生成当前项目的站点(Web Site)信息、报告文档;

 

注意:上面是在命令行通过 maven 命令对项目进行构建的;

当然,使用 IDEA 工具也可以直接对项目进行构建,双击下面 maven 对应的命令,IDEA 就会自动执行该命令。

 

思考:maven 是从什么地方下载第三方依赖的 jar 包,或者生命周期的插件的?

在 maven 的 lib 目录下有一个 maven-model-builder-3.6.1.jar 文件(不同的 maven 版本对应该文件的版本也不一样);

解压该文件,在 maven-model-builder-3.6.1\org\apache\maven\model 路径下有一个 pom-4.0.0.xml 配置文件;

该配置文件中有一个 <repositories> 节点,配置的就是下载第三方依赖 jar 包的地址(maven 中心仓库):

该配置文件中还有一个 <pluginRepositories> 节点,配置的就是下载 maven 生命周期插件的地址:

maven 下载的 jar 包或者插件存放在本地仓库中;本地仓库的位置在 maven 软件的 conf 目录下的 settings.xml 中配置:

(上面已经配置过了)

 

 Maven 仓库的概念:

1、本地仓库:localRepository

        在 maven 软件的 conf 目录下的 settings.xml 中配置;

2、公司私服仓库:存放在公司局域网的服务器中;

        使用 nexus 软件来发布 maven 私服;

3、 中心仓库:面向全球的

        https://search.maven.org/

        http://repo.maven.apache.org/maven2/

 

 Maven 坐标的概念:

当项目中使用 maven 管理 jar 包时,maven 会从中心仓库下载项目所依赖的 jar 包;

那么,maven 中心仓库有那么多 jar 包,它怎么知道要下载哪一个 jar 包呢?

这就使用到坐标的概念,maven 使用一个坐标来唯一标识一个 jar 包;

坐标的组成:groupId + artifactId + version;

1、groupId:组 id,一般用来标识该 jar 包属于哪个公司,或者哪个结构(比如 org.apache);

2、artifactId:构建物 id,一般用来标识产品名,或产品的 id(比如 struts2,spring);

3、version:版本号;

groupId + artifactId + version 组成的坐标就可以用来唯一标识一个 jar 包;

 

pom.xml 介绍:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!-- pom 版本 -->
    <modelVersion>4.0.0</modelVersion>

    <!--
        坐标:maven 使用坐标的概念来唯一定位一个 jar 包
        坐标 = groupId + artifactId + version
        groupId:组id,一般用来表示一个组织,或者机构,或者公司的 包名;
        artifactId:产品id;
        version:版本;
            SNAPSHOT 表示测试版本(或者叫镜像版本);
            RELEASE 表示发行版本(或者叫最终版本);
    -->
    <groupId>com.maven.demo</groupId>
    <artifactId>mavendemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 表示发布的是 jar 包,可以不写(默认就是 jar 包) -->
    <packaging>jar</packaging>

    <!-- 项目名称:可以不写 -->
    <name>mavendemo</name>

    <!-- 项目所依赖的 jar 包,可以有多个 -->
    <dependencies>
        <!-- 声明 jar 包的依赖,依赖的是 junit4.12 的 jar 包 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <!--
                依赖的 jar 包的使用范围:
                test:表示测试的时候使用该 jar 包,即发布以后就不能使用该 jar 包了;
                compile:表示编译的时候使用该 jar 包,即将该 jar 包编译到项目中;
                    如果 scope 不写,默认 jar 包的使用范围就是 compile;
            -->
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值