Maven

1.Maven简介

        1.1 为什么要使用Maven?

                传统方式构建的web项目

                 

        特点:项目中使用jar包,需要重复的复制到项目的lib中


                maven方式创建的web项目

                

                相比之下占用空间要小得多

1.2 maven是什么?

        maven[ˈmevən]是Apache公司的开源项目,是一个项目构建工具,用来管理依赖。

        maven有两大核心功能:

                1.管理依赖:对jar包统一管理。

                 2.项目构建:项目再编码完成后,对项目进行编译、测试、打包、部署、等操作。

1.3.Maven的好处如何实现?

      1.3.1.仓库

                本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包

                私服:如果本地需要插件或者 jar 包,本地仓库没有则去私服下载

                中央仓库 :中央仓库服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件。

        1.3.2坐标

                作用:用于定位jar包在仓库中的位置

                坐标:org.mybatis(公司) + mybatis(项目) + 3.4.5(版本信息)

<dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
</dependency>

2. Maven安装

        2.1 下载

        官网:http://maven.apache.org/ 

        2.2解压

        Maven 下载后将 Maven 解压到一个没有中文没有空格的路径下, 解压后目录结构如下:

        

        bin:脚本命令

        boot:引导程序,如类加载器等

        conf:配置文件,如 setting.xml 文件

        lib:maven 本身运行所需的一些 jar 包

        2.3配置环境变量

        安装前提:maven是由java语言开发,它的运行依赖于jdk

        安装步骤:

        1.配置MAVEN_HOME

        2.将MAVEN_HOME环境变量配置到path中

        3.测试

        找开 cmd 命令,输入 mvn –version命令,如下图

        

        2.4.配置阿里云镜像仓库

        直接从maven中央仓库下载速度非常慢,我们可以在settings配置文件中,配置阿里云镜像仓库:

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

        2.5.配置本地仓库路径

        打开 settings.xml文件,配置如下:

  <!-- localRepository
           | The path to the local repository maven will use to store artifacts.
           |
           | Default: ${user.home}/.m2/repository
          <localRepository>/path/to/local/repo</localRepository>
  -->

<localRepository>D:\mvn_repository</localRepository>

        路径是自定义的

3.Idea集成Maven

        3.1.配置maven

打开:File | Settings | Build, Execution, Deployment | Build Tools | Maven

        3.2.设置idea自动导入依赖

        第一种方式:首次在pom文件中添加依赖时,IDEA右下角会弹框提示是否开启自动导入,点击开启即可。

        

        第二种方式:File | Settings | Build, Execution, Deployment | Build Tools | Maven | Importing

        注:idea新版本不需要导入,软件自动导入,可掠过这一步

4.创建maven工程

        4.1.创建工程

        1.选择maven

        老版本idea:

2.设置工程名

3.设置工程位置

新版本idea:

        

        4.2.maven工程目录结构

        目录结构如下图:

        

        说明:

|---src:源码

|--- |---main:存放主程序

|--- |--- |---java:java源码文件

|--- |--- |---resource:存放框架的配置文件

|--- |--- test:存放测试程序

|---pom.xml:maven的核心配置文件

4.3.添加依赖

  1. 查找坐标

    在浏览器打开https://mvnrepository.com/,查找junit的坐标(直接搜索框搜索)

  2. 在pom文件添加依赖

        <dependencies>
            <dependency>
                <groupId>
    junit</groupId>
                <artifactId>
    junit</artifactId>
                <version>
    4.12</version>
            </dependency>
        </dependencies>

添加测试类

import org.junit.Test;

public class DemoTest {
    @Test
    public void test(){
        System.out.println("hello,maven!");
    }
}

5.生命周期

        5.1.常用命令

                在pom.xml的同级目录下面,执行cmd命令

        5.1.1.clean   

                命令:mvn clean

                说明:将项目根目录下target目录清理掉

        5.1.2.compile

                命令:mvn compile

                说明:将项目中的.java文件编译为.class文件

        5.1.3 test

                 命令:mvn test

                说明:将项目根目录下target目录清理掉

        5.1.4.package

                命令:mvn package

                说明:将项目打包到target目录下

        5.1.5.install

                命令:mvn install

                说明:打包到本地仓库

        5.1.6.deploy

                命令:mvn deploy

                说明:部署到远程仓库

        注:这些命令在idea中又快捷方式,无须特意记忆

5.2.生命周期

        在maven中存在“三套”生命周期,每一套生命周期相互独立、互不影响,并且在一套生命周期内,执行后面的命令前面的命令都会自动执行:

        清理生命周期:

                clean

        默认生命周期:

                compile—test—package—install—deploy

        站点生命周期(生成网页,一般不用且需要插件):

                site

6.依赖管理

        6.1.依赖传递

        直接依赖:在当前项目中,通过依赖配置建立的依赖关系

        间接依赖:被依赖的资源,如果还依赖其他资源,那么当前项目间接依赖其他资源

        6.2.依赖冲突

        依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突。

如下所示:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

        通过查看依赖,我们发现spring-aop和spring-context都依赖了一个叫spring-core的依赖。此时spring-core的版本有两个,这样就产生了依赖冲突

        6.2.1.第一声明者优先原则

        谁先定义的就用谁的传递依赖:即调换spring-aop和spring-context位置

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>

        效果:

                        

        

        6.2.2.路径近者优先原则

        直接依赖级别高于传递依赖:即直接引入spring-beans

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

        6.2.3.排除依赖

        排除依赖:在不影响项目运行的情况下把冲突的依赖排除掉

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
    <exclusions>
        <exclusion>
            <artifactId>spring-core</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

        

        *6.2.4.版本锁定(重点)

    <properties>
        <spring-core.version>5.2.0.RELEASE</spring-core.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring-core.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
    </dependencies>

        

        6.3.依赖范围

        6.3.1.什么是依赖范围?

        依赖的jar包在默认情况下可以在任何范围内使用,可以通过scope标签来控制其作用范围。作用范围如下:

        主程序(main方法)

        测试程序(junit)

        打包(package指令范围之内)

        例:把spring-context的作用域换成test

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.8.RELEASE</version>
    <scope>test</scope>
</dependency>

  • 39
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值