Maven的基础使用

1.Maven简介

1.1.为什么要使用Maven?

传统方式构建的 web 项目:

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

maven方式构建的 web 项目:

特点:maven项目中没有jar包

1.2.Maven是什么?

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

maven有两大核心功能:

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

2.项目构建:项目在编码完成后,对项目进行编译测试、打包、部署的一系列操作

1.3.Maven的好处如何实现?

1.3.1.仓库

  • 本地仓库 :在程序员的电脑上,用于存储从中央仓库和私服下载的jar包

  • 私服:在公司的一台电脑上,用于存储从中央仓库下载本地仓库没有的jar包。

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

1.3.2.坐标

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

举例:mybatis-3.4.5.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.下载

官网:Maven – Welcome to Apache Maven

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

4.创建maven工程

4.1.创建工程

4.2.1.创建工程

  1. 选择maven

  2. 设置工程名

  3. 设置工程位置

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>
  3. 添加测试类

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

4.4解决依赖下载失败的问题

1.删除文件重新下载

2.拷贝其他人的依赖

下载失败依赖:

下载成功依赖:

        

5.Maven生命周期

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

  • 说明:部署到远程仓库

5.2.生命周期

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

  • 清理生命周期:(相当于把运行编译文件夹target干掉)

    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.版本锁定

版本锁定:使用dependencyManagement 进行版本锁定

<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的Java目录)

测试程序(test的Java目录)

打包(war包)

6.3.2.测试

  1. 把spring-context的作用域换成test

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

  2. 在main的Java目录中测试

    public class Demo {
        public static void main(String[] args) {
            ApplicationContext applicationContext = 
                                new ClassPathXmlApplicationContext("");//报错
        }
    }

  3. 在test的Java目录中测试

    public class Demo {
        public static void main(String[] args) {
            ApplicationContext applicationContext = 
                                new ClassPathXmlApplicationContext("");//报错
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值