Maven

java项目构建工具

特点

  1. 方便快速完成分布式开发

  2. 方便完成项目的依赖管理

安装与配置

解压后配置环境变量

仓库

存放maven项目的目录(文件夹)

本地仓库

默认位置:C:\Users\Administrator.m2\repository

本机上用于存放maven项目的目录,服务于本机所有maven项目

远程仓库

  1. 中央仓库

    maven官方提供,服务器架设在国外,服务于全世界所有maven项目

  2. 中央仓库镜像

    服务器架设在某一个区域内,服务区域内所有maven项目

  3. 私服

    架设在局域网内的maven服务器,服务于当前局域网内所有的maven项目;

指定本地仓库

<!--apache-maven-3.6.0\conf\settings内修改-->
<localRepository>目录地址</localRepository>

配置中央仓库镜像

<!--apache-maven-3.6.0\conf\settings内修改-->
<mirrors>
    <mirror>
        <id>aliyun-public</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun public</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
        <id>aliyun-central</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun central</name>
        <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>
        <id>aliyun-spring</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun spring</name>
        <url>https://maven.aliyun.com/repository/spring</url>
    </mirror>
    <mirror>
        <id>aliyun-spring-plugin</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun spring-plugin</name>
        <url>https://maven.aliyun.com/repository/spring-plugin</url>
    </mirror>
    <mirror>
        <id>aliyun-apache-snapshots</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun apache-snapshots</name>
        <url>https://maven.aliyun.com/repository/apache-snapshots</url>
    </mirror>
    <mirror>
        <id>aliyun-google</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun google</name>
        <url>https://maven.aliyun.com/repository/google</url>
    </mirror>
    <mirror>
        <id>aliyun-gradle-plugin</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun gradle-plugin</name>
        <url>https://maven.aliyun.com/repository/gradle-plugin</url>
    </mirror>
    <mirror>
        <id>aliyun-jcenter</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun jcenter</name>
        <url>https://maven.aliyun.com/repository/jcenter</url>
    </mirror>
    <mirror>
        <id>aliyun-releases</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun releases</name>
        <url>https://maven.aliyun.com/repository/releases</url>
    </mirror>
    <mirror>
        <id>aliyun-snapshots</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun snapshots</name>
        <url>https://maven.aliyun.com/repository/snapshots</url>
    </mirror>
    <mirror>
        <id>aliyun-grails-core</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun grails-core</name>
        <url>https://maven.aliyun.com/repository/grails-core</url>
    </mirror>
    <mirror>
        <id>aliyun-mapr-public</id>
        <mirrorOf>*</mirrorOf>
        <name>aliyun mapr-public</name>
        <url>https://maven.aliyun.com/repository/mapr-public</url>
    </mirror>
</mirrors>

坐标

定位项目在maven仓库位置

groupId:配置项目所属公司或组织的域名(倒写)

artifactId:配置项目名称

version:配置项目版本

生命周期

maven有三套相互独立的生命周期,每套都包含了生命周期指令

clean lifecycle

执行清理工作

mvn pre-clean:执行清理工作之前执行的指令

mvn clean:清理前一次编译结果💥

mvn post-clean:执行清理工作之后执行的指令

不管执行生命周期的哪个阶段,都从当前生命周期最初位置开始执行

default lifecycle

核心maven会完成编译、测试、打包、安装、部署等工作;

mvn compile:编译💥

mvn test:测试

mvn package:打包💥

mvn install:安装💥

mvn depoly:部署

site lifecycle

生成站点信息(了解)

mvn site:生成当前项目站点信息

pom.xml

依赖

<dependencies>标签引入外部依赖

子标签<dependency>配置引入maven项目的坐标信息

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.45</version>
    </dependency>
</dependencies>

依赖传递

某个项目依赖了外部依赖又被其他项目所依赖,该项目依赖的外部依赖可传递到其他项目

<dependency>子标签<scope>:用于设置当前引入的外部依赖的作用范围,常用的取值有:

  1. compile:表示依赖具备传递性(默认值)

  2. test:表示依赖仅参与测试阶段,此时依赖不具备传递性(引入单元测试junit,取值就是test)

  3. provided:表示依赖仅参与编译阶段,不参与打包部署,不具备传递性(引入servlet-api依赖,scope必须取成provided)

  4. runtime:表示依赖会参与到运行阶段中(引入数据库驱动(mysql-connector-java),取值就是runtime)

依赖原则

  1. 项目中有多个相同依赖传递到本项目中,路径最短者优先;

  2. 路径相同时,先配置者优先;

依赖排除

<!--exclusions用于依赖排除,每个exclusion用于排除一个依赖-->
<exclusions>
    <exclusion>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
    </exclusion>
</exclusions>

依赖继承

maven的继承是maven项目之间的继承,一定需要有一个父项目,子项目才可以去完成继承动作

maven的父项目是通过pom.xml中的<packaging>标签设置

<packaging>标签用于设置maven项目的打包形式:

jar:表示将当前项目打成jar包

war:表示将当前项目打成war包

pom:表示当前项目是一个父项目,如果设置为pom之后,当前项目进行编译或打包、安装、部署等操作时,不会对src目录进行任何操作(可以删除src目录)

实现步骤

  1. 创建父项目

    <packaging>pom</packaging>

  2. 创建子项目,继承父项目

    <!--子项目中通过parent标签来完成继承的动作-->
    <parent>
        <groupId>com.woniuxy</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    maven继承中,父项目与子项目的关联性很弱,对父项目进行任何操作,子项目不会跟着发生变化

maven聚合

maven聚合是建立在继承基础上。实现聚合,要在父项目中通过<modules>标签将子项目包含进来,此时父项目中执行操作,子项目会跟着执行相应操作

实现步骤:

  1. 在父项目中通过<modules>标签将子项目包含

    <modules>
        <module>MyShop_Commons</module>
        <module>MyShop_Dao</module>
        <module>MyShop_Service</module>
        <module>MyShop_Web</module>
    </modules>

  2. 在子项目的<parent>标签中使用<relativePath>标签指向父项目的pom.xml

    <!--子项目中通过parent标签来完成继承的动作-->
    <parent>
        <groupId>com.woniuxy</groupId>
        <artifactId>parent1</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!--子项目操作通过执行父项目的pom.xml来完成-->
        <relativePath>../parent1/pom.xml</relativePath>
    </parent>

父项目集中管理依赖版本

在父项目的pom.xml中可以通过<dependencyManagement>声明依赖

注意:

此时依赖不会实际引入,在子项目中按需去加载所需依赖,一定不要加<version>子标签

由于父项目中管理的依赖过多,导致查询相关依赖版本时比较难找,可直接在<properties>标签中自定义版本标签

父项目

<properties>
    <mybatis.version>3.5.6</mybatis.version>
</properties>
<!--该标签的子标签是dependencies-->
<dependencyManagement>
    <!--
        当dependencies标签处于dependencyManagement标签中
        标签内部引入的外部依赖不会实际引入项目,只做相关声明
    -->
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

子项目

<dependencies>
    <!--
		子项目中使用父项目管理的依赖,此时在子项目要去按需加载对应依赖,
        但是一定不要加version标签(加了version标签后就是单独引入一个依赖)
        不然不走父项目管理依赖
	-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
    </dependency>
</dependencies>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值