01.maven的常见操作

maven其实就是一个粘贴依赖,刷新项目的流程

1.为什么使用maven

     (1)方便第三方jar包的添加

 

(2)方便第三方jar包的获取

 (3) jar包之间的依赖关系

Maven就可以替我们自动的将当前jar包所依赖的其他所有jar包全部导入进来,无需人工参与

(4)jar包之间的冲突问题

举个例子:

MakeFriend依赖HelloFriend,HelloFriend依赖Hello。而Hello依赖log4j.1.2.17.jar,HelloFriend依赖log4j.1.2.14.jar。如下图所示:

  因为Maven中内置了两条依赖原则:最短路径者优先和先声明者优先,上述问题MakeFriend工程会自动使用log4j.1.2.14.jar。

(5)maven可以将项目拆分,适合分工—利用Maven的依赖管理机制

上层模块依赖下层,所以下层模块中定义的API都可以为上层所调用和访问。相当于一种解耦思想

(6)项目的分布式部署

                    每个模块都需要运行在独立的服务器 

ps.一般不会利用maven进行分布式部署

2. 在IDEA中使用Maven

      (1)添加依赖:在本地仓库寻找junit.jar包(本地没有会自动下载)

 <!--通过dependence添加依赖-->
     <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

 (2)IDEA中常见操作

clean: 把已经编译的东西清理一遍

validate:校验目前的maven结构是否正常

compile:编译主程序

test:编译测试程序(自动化运营测试:先编译主程序,再编译测试程序)

package:打包成jar包(部署到服务器或者放到仓库)

install:把jar包安装到本地仓库RepMaven(如果)

3. Maven的核心概念

(1)坐标

使用如下三个向量在Maven的仓库中确定唯一的jar

              (1)groupId:公司或组织的域名倒序+当前项目名称

              (2)artifactId:当前项目的模块名称

              (3)version:当前模块的版本

  (2) POM的概念

    POM:将项目进行拆分,进行模块化管理

(3)依赖管理

 3.1依赖范围:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.0</version>
        <scope>test</scope>
    </dependency>

scope标签决定了当前依赖:1.compile(默认值,同时包括main与test)

                                              2.provided(同时包括main与test)

                                              3. main 或test

ps.compile与provided的区别是

compile部署到Tomcat服务器上运行时放在WEB-INF的lib目录下

provided部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下

tomcat就是一款web端应用服务器,provided不需要放到服务器上说明服务器自带

3.2  依赖传递性

例如:A依赖于B,B依赖与C D E,判断A是否可以间接的依赖C D E

依赖的原则:

      (1)路径最短者优先

                

       (2)路径相同时声明者优先

                  

取决于在MakeFriend中添加依赖的顺序,以先依赖的为准 

3.3  Jar包的排除

通过exclusions:

假设本项目依赖于OurFriends,OurFriends依赖于commons-logging,如果不想让本项目间接依赖commons-logging,则执行如下操作:

<dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>OurFriends</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--依赖排除-->
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 相当于排除OurFriends中的commons_logging

3.4 jar包的统一管理

引用一套spring全家桶:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>4.0.0.RELEASE</version>
</dependency>

对引用一套jar包的时候,防止不同版本的冲突,内部的版本号需要控制一下:

将版本号定义为一个变量:

<properties>
    <spring.version>4.0.0.RELEASE</spring.version>
</properties>

通过$引用这个变量: 

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
</dependency>

(4)  仓库 

(1)本地仓库:本电脑的Maven服务系统

(2)远程仓库:

            a)私服:局域网下Maven工程服务。

     b)中央仓库:架设在Internet上,为全世界所有Maven工程服务。

     c)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

(5)生命周期

  • Clean Lifecycle在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle构建的核心部分,编译,测试,打包,安装,部署等等。

4. 继承

父工程的作用就是提前做一些配置,方便子工程的使用

1.创建父工程(命名为parent):父工程的打包方式为pom(默认的打包方式为jar包)

<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

父工程只需要保留pom.xml文件即可

2.   在父工程可以进行统一的jar包的控制:例如将junit控制在4.0版本

<!--依赖管理-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3.  在子工程中引用父工程:在每一个子工程的pom.xml文件中加入父工程的坐标:

<parent>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--指定从当前pom.xml文件出发寻找父工程的pom.xml文件的相对路径-->
<relativePath>../Parent/pom.xml</relativePath>
</parent>

##  ../ 相当于跳到根目录下面,在根目录下寻找parent

 ps.注意子工程删除范围和版本号,否则父工程中的指定版本号将不起作用

5.聚合

    将工程分为模块后,使用聚合可以批量进行Maven的安装,清理工作

在父工程的pom.xml中进行如下配置:

<!--聚合-->
<modules>
    <module>../MakeFriend</module>
    <module>../OurFriends</module>
    <module>../HelloFriend</module>
    <module>../Hello</module>
</modules>

在每一个<module>里面放置需要管理的子工程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值