Maven最全知识点总结

目录

一、Maven的作用:

1.一键构建:

2.依赖管理:

 3.Maven将jar包存放在仓库中。

二、Maven的生命周期(构建生命周期)

注:不包括开发过程,开发过程为程序员的工作。

三、一键构建_Maven常用命令

在Maven构建项目的每一步都可以使用一句简单的命令完成(cmd中)。

注明:

四、依赖管理_Maven仓库类型

Maven项目首先访问的仓库是“本地仓库”

在Maven中,“中央仓库”拥有最全的jar包资源

注明:

五、创建Maven项目:

1.打开 idea,选择创建一个新工程

2.选择Maven工程,并使用maven的web工程模板

3.点击 Next 填写项目信息

4.点击 Next,此处不做改动,点击Finish构建项目

六、Maven工程开发_依赖范围:

七、Maven工程测试_Junit使用步骤:

1.在Maven项目中引入依赖:

2.定义一个计算器工具类

3.对定义的类进行测试:

1 (1)创建src/test/java包,并将改包设置为测试包。

(2)在src/test/java中创建测试类的包,包名一般与被测试包名一致。

(3)定义测试类,类名一般为被测试类+Test

4.测试类中编写测试方法:

5.点击测试方法边的三角运行测试方法

如果出现绿色对钩,证明方法能正常运行;如果出现红色感叹号,证明方法抛出异常,需要修改方法 

八、Maven工程测试_@Before、@After

@Before修饰的方法会在测试方法之前自动执行

@After修饰的方法会在测试方法执行之后自动执行

九、依赖冲突调节(自动调节)_最短路径优先原则和最先声明原则:

1.依赖冲突:

2.Maven调解依赖冲突的第一原则—最短路径优先原则:

如:

spring-webmvc到spring-aop的路径为:

而spring-context到spring-aop的路径为:

spring-context到spring-aop的路径更短,所以spring-aop会按照spring-context的版本引入。

3.依赖冲突调解_最先声明原则

Maven调解依赖冲突的第二原则--最先声明原则:

十、依赖冲突调节(手动调节)_排除依赖和锁定版本

排除依赖:

2.锁定版本 :

十一、Maven聚合开发_聚合关系:

之前我们在Idea中开发时会将项目的所有包放在同一个工程中。

Maven将一个大项目分成一个个小项目开发,最后打包时会将这些小的项目打成一个完整的war包独立运行。

Maven聚合开发总结:

1.将原有项目按需拆分成一个个小项目开发

2.最后打包时会将小项目打成一个完整的war包独立运行

3.聚合开发能提高代码复用率,提升开发效率

十二、Maven聚合开发_继承关系:

多继承

十三、Maven聚合案例_搭建父工程:

IDEA中工程project和模块Module有什么区别?


一、Maven的作用:

1.一键构建:

项目要经过编译、测试、运行、打包、安装部署等一系列过程,这些过程称为构建。通过Maven工具,可以使用简单的命令轻松完成构建工作。

2.依赖管理:

Maven工具中将所有jar包存放在仓库中,需要什么jar包导入jar包地址即可,运行时根据坐标即可从maven仓库中拿到jar包,项目中不用再配置jar包,所有maven项目的jar包都从maven仓库中导入,大大减小了项目的内存大小。

 3.Maven将jar包存放在仓库中

二、Maven的生命周期(构建生命周期)

如下图的一系列过程称为Maven的构建生命周期:

 

注:不包括开发过程,开发过程为程序员的工作。

三、一键构建_Maven常用命令

在Maven构建项目的每一步都可以使用一句简单的命令完成(cmd中)。

注明:

Maven可以依赖插件来执行命令,比如clean、validate等命令是maven自带的命令,tomcat7命令是引入的第三方插件。

四、依赖管理_Maven仓库类型

 

  1. Maven项目首先访问的仓库是“本地仓库”

  2. 在Maven中,“中央仓库”拥有最全的jar包资源

注明:

(1)远程仓库不是必须配置的,如果本地仓库没有jar包,也没有配置远程仓库,则会直接从中央仓库下载。

(2)中央仓库访问速度较慢,我们一般都会配置镜像代理中央仓库的下载请求,如阿里镜像、华为镜像等。

五、创建Maven项目:

1.打开 idea,选择创建一个新工程

 

2.选择Maven工程,并使用mavenweb工程模板

 

3.点击 Next 填写项目信息

 

4.点击 Next,此处不做改动,点击Finish构建项目

六、Maven工程开发_依赖范围:

`

这是由于项目中引入了ServletJspjar包,而在项目运行时,

Tomcat要使用它自带的ServletJspjar包,这样就造成了jar包冲突。但如果项目不引入ServletJspjar包,则根本无法通过编译。

此时可以设置依赖的作用范围解决该问题,设置ServletJspjar 包只在编译期起作用运行时不起作用,这样不仅可以通过编译, 还能在运行时避免jar包冲突。

通过在 <dependency> 中添加 <scope> ,可以设置依赖的作用范围,有以 下取值:

 

所以对于ServletJsp依赖,我们添加依赖范围为provided即可。

 

 

刷新Maven,即可正常访问ServletJsp

七、Maven工程测试_Junit使用步骤:

1.在Maven项目中引入依赖:

 

2.定义一个计算器工具类

 

3.对定义的类进行测试:

1 (1)创建src/test/java包,并将改包设置为测试包。

(2)在src/test/java中创建测试类的包,包名一般与被测试包名一致。

(3)定义测试类,类名一般为被测试类+Test

 

4.测试类中编写测试方法:

 

  

5.点击测试方法边的三角运行测试方法

如果出现绿色对钩,证明方法能正常运行;如果出现红色感叹号,证明方法抛出异常,需要修改方法 

八、Maven工程测试_@Before、@After

在测试类中,

@Before修饰的方法会在测试方法之前自动执行

@After修饰的方法会在测试方法执行之后自动执行

之后的学习中,我们可以设置前置方法为获取资源,后置方法为释放资源。

九、依赖冲突调节(自动调节)_最短路径优先原则和最先声明原则:

1.依赖冲突:

假设你的项目依赖jarAjarA又依赖jarB。当添加jarA时,Maven会把jarB也自动加入到项目中。这时就可能会产生依赖冲突问题,比如依赖A会引入依赖C,依赖B 也会引入依赖C。如果不进行调解则会引入两个依赖C,那么Maven就会发生依赖冲突。

2.Maven调解依赖冲突的第一原则最短路径优先原则:

也就是说项目依赖关系树中路径最短的版本会被使用。例如,假设有几个jar包之间的依赖关系是: A->B->C->D(2.0) E->F->D(1.0) ,如果同时引入AE,那么D(1.0)会被使用,因为ED的路径更短。

如:

spring-webmvcspring-aop的路径为:

spring-contextspring-aop的路径为:

 

spring-contextspring-aop的路径更短,所以spring-aop会按照spring-context的版本引入。

3.依赖冲突调解_最先声明原则

最短路径优先原则不能解决所有问题,比如这样的依赖关系: A–>B–>C(1.0) D–>E–>C(2.0) ,同时引入AD之后,C(1.0)C(2.0)的依赖路径长度都为2。此时第一原则将不能解决问题

Maven调解依赖冲突的第二原则--最先声明原则:

在依赖路径长度相等的前提下,在POM中依赖声明的顺序靠前的会被解析使用。

十、依赖冲突调节(手动调节)_排除依赖和锁定版本

如果不想使用Maven默认的冲突调解方式,有两种方式可以手动进行冲突调解。

  1. 排除依赖:

如:如果想使用spring-webmvcspring-aop包,那么可以让spring-context引入时排除引入spring-aop包,这样就可以使用spring-webmvcspring-aop包了,写法如下:

 

2.锁定版本

Maven中为某个jar包配置锁定版本后,不考虑依赖的声明顺序和依赖路径,以锁定的版本的为准添加到工程中,此方法在企业开发中常用。以下可以直接配置spring-aop锁定的版本。

十一、Maven聚合开发_聚合关系:

之前我们在Idea中开发时会将项目的所有包放在同一个工程中。

 

假如我们现在写了两个项目分别是电商卖家端和电商买家端,两个项目都需要调用serive层查询订单的方法。原来的写法如下:

重复编码造成开发效率降低。

而使用maven后,我们可以把之前的项目按需拆分成一个个小项目,之后将小项目发布到仓库中,小项目之间也可以互相引用,并且在我们的项目中引入需要的小项目即可。

Maven将一个大项目分成一个个小项目开发,最后打包时会将这些小的项目打成一个完整的war包独立运行。

Maven聚合开发总结:

1.将原有项目按需拆分成一个个小项目开发

2.最后打包时会将小项目打成一个完整的war包独立运行

3.聚合开发能提高代码复用率,提升开发效率

十二、Maven聚合开发_继承关系:

Maven中的继承是针对于父工程和子工程。父工程定义的依赖和插件子工程可以直接使用。注意父工程类型一定为POM类型工程。

多继承

Maven中对于继承采用的也是单继承,也就是说一个子项目只能有一个父项目。但我们可以在 <dependencyManagement> 配置多继承。

十三、Maven聚合案例_搭建父工程:

创建Maven工程作为父工程,父工程是虚拟工程,不需要写逻辑代码,所以删除父工程的src目录。

由于父工程的依赖和插件子工程都能继承,所以可以将需要的依赖和插件都配置在父工程中。

<packaging>pom</packaging>

    <properties>
        <!--  Spring版本  -->
        <spring.version>5.2.12.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!--  mybatis  -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!--  mysql驱动  -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--  druid连接池  -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <!--  MyBatis与Spring的整合包  -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--  springmvc  -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</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-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.7</version>
        </dependency>
        <!--  jstl  -->
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
        <!--  servlet  -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!--  jsp  -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <!--  junit  -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--  log4j  -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!--  tomcat插件  -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>tomcat7</server>
                    <systemProperties>
                        <java.util.logging.SimpleFormatter.format>%1$tH:%1$tM:%1$tS %2$s%n%4$s: %5$s%6$s%n </java.util.logging.SimpleFormatter.format>
                    </systemProperties>
                </configuration>
            </plugin>
        </plugins>
    </build>

IDEA中工程project和模块Module有什么区别?

答:没有什么区别,只是新工程会占据一个新窗口,一般写父工程时定义为新工程,写子工程时定义为新模块。

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值