栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

maven知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

maven知识点

Maven

欢迎打开这篇文章

一,内容清单

1,知识点

1.1、Maven简介、下载、安装、配置

1.1.1、Maven简介1.1.2、下载1.1.3、安装1.1.4、配置 1.2、Maven构建项目的生命周期、常用命令

1.2.1、Maven构建项目的生命周期1.2.2、Maven常用命令 1.3、在idea环境配置Maven,并创建Maven工程

1.3.1、Maven工程pom.xml详解 1.4、Maven的高级特性(模块化、聚合等)

1.4.1、依赖管理

1.4.1.1、maven坐标1.4.1.2、依赖导入1.4.1.3、依赖配置 1.4.2、依赖传递

1.4.2.1、什么是依赖传递1.4.2.2、什么是依赖冲突1.4.2.3、如何解决依赖冲突 1.4.3、maven项目模块化1.4.4、maven项目的继承1.4.5、maven项目的聚合 2,总结

欢迎打开这篇文章

你好! 这是你第一次了解 Maven 所展示的欢迎页。如果你想学习如何使用Maven, 可以仔细阅读这篇文章,了解一下基本语法知识。

一,内容清单
1,知识点
1.1、Maven简介、下载、安装、配置
1.1.1、Maven简介

==(能帮我们做什么)==maven是一个项目管理工具,主要作用是在项目开发阶段对项目进行依赖管理和项目构建,以及管理插件。


==(它出现并流行的历史背景)==以前项目都把jar包一股脑的往lib目录下塞,容易造成以下问题:

    造成包的冗余:每个项目需要复制一次这些包,占用大量的空间。

    不易管理:不同的开发者使用的jar包的版本不同,导致包不统一,甚至出现包的冲突。

    阅读性差 : 应该导入哪些jar包,这些包又依赖了哪些包并不清楚。


==依赖管理==:就是对jar包的管理,以往我们需要下载好xxxx.jar的jar包,粘贴到工程的lib目录下面去,使用maven的依赖管理功能,想要引入某个包只需要导入maven的坐标即可(它会通过坐标找到对应的jar包并下载到本地的maven仓库)。

那我怎么知道某个jar包的坐标是什么呢?(提这个问题的同学非常Nice,点赞!!!)

​ 我们可以打开maven的中央仓库,在里面搜索我们想要的jar包对应的坐标。maven中央仓库地址:https://mvnrepository.com/

​ 比如我要用junit的jar包,那么操作如下图所示:

​ 第一步:打开浏览器,在搜索框输入maven repository或者 maven 中央仓库回车进入到mavne中央仓库的主页面。

第二步:在搜索框输入想要jar包的名字,我这里要junit所以就输入junit,回车之后选中自己所要的junit,点击进入详情页

第三步:选中使用人数较多的版本(经过了市场检验的,使用人多说明稳定性好),点击进去就可以复制它的坐标了。


我复制了它的坐标粘贴到哪儿呢?(Excellent! 非常好!666)

​ 我们创建的maven项目(下面有如何创建maven项目)会有个pom.xml的文件,就写到这个文件里面(下面有这个文件的标签元素代表着什么意思的详细说明),如下图所示:

项目构建:通过maven的一个命令就可以完成项目从清理、编译、测试、报告、打包、部署整个过程。


插件管理:Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。例如编译源代码是由maven-compiler-plugin完成的,但是这些插件都是maven默认的插件,如果需要配置自己的插件,则需要通过插件的坐标来引入插件。插件的坐标可以从maven官方提供的插件列表进行下载.

1.1.2、下载
官方网站:http://maven.apache.org/
下载页面:http://maven.apache.org/download.cgi

说明:下面演示版本为3.6.1

1.1.3、安装

maven安装包下载完成后是一个压缩文件,如下图所示:

我们需要将压缩包解压到一个没有中文,空格或其他特殊字符的文件夹内即可使用:

安装文件说明,如下图

1.1.4、配置

配置Maven环境变量(MAVEN_HOME=maven压缩包解压目录)

第一步:新增环境变量:MAVEN_HOME

第二步:在path环境变量中添加:%MAVEN_HOME%bin;

第三步:测试:在cmd控制台中输入命令: mvn -v ;如果出现以下maven的版本信息,则说明maven的安装与环境变量的配置均正确;

Maven仓库配置

maven的仓库可以分为3种:

仓库名称作用
本地仓库相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。
中央仓库是远程仓库,仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:http://repo1.maven.org/maven2
私服是远程仓库, 一般是在公司内部架设一台私人服务器对外公开。开发中经常使用的国内私服:阿里云 http://maven.aliyun.com/nexus/content/groups/public

配置本地仓库

本地仓库的位置是通过maven的核心配置文件(settings.xml)来配置的。settings.xml文件位于maven安装目录:…apache-maven-3.5.2confsettings.xml 。

打开setting.xml文件,发现本地仓库默认的地址为当前用户的/.m2/repository目录

一般情况下,我们需要自己重新设置本地仓库的地址,设置方法如下:

第一步:在maven的安装目录下创建一个repository文件夹(一般习惯将仓库地址和maven安装目录放置在一起)。

第二步:在核心配置文件setting.xml中,将仓库存放的位置设置成自己的maven安装路径


  
  D:devlopmavenrepository

第三步:配置阿里云镜像加速

  
    
            alimaven-central
            central
            aliyun maven
            http://maven.aliyun.com/nexus/content/repositories/central/
        
    
  
1.2、Maven构建项目的生命周期、常用命令 1.2.1、Maven构建项目的生命周期

生命周期是什么

在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试,部署等工作,这个过程就是项目构建的生命周期。虽然大家都在不停的做构建工作,但公司与公司之间,项目与项目之间构建项目的方式有所不同。

Maven对所有的构建过程进行了抽象和统一。Maven构建项目的生命周期包含了项目清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。

比如我们项目中最常用的一套流程,如下图所示:

Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作,在Maven的设计中,实际任务(如代码编译)都交给插件来完成。

Maven的三套生命周期
maven的生命周期不止一套,有3套,每套里面都包含的事件如下:

(1)clean:清理工作

> pre-clean:执行一些在clean之前的工作
>
> clean:移除上一次构建产生的所有文件
>
> post-clean:执行一些在clean之后立刻完成的工作

(2)default:核心工作,例如编译,测试,打包,部署等


对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍

(3)site:产生报告,发布站点等
pre-site:执行一些在生成站点文档之前的工作

site:生成项目的站点文档

post-site:执行一些在生成站点文档之后完成的工作,为部署做准备

site-deploy:将生成的站点文档部署到特定的服务器上
1.2.2、Maven常用命令
mvn clean:调用clean生命周期的clean阶段,清理上一次构建项目生成的文件;
mvn compile :编译src/main/java中的java代码;
mvn test :编译并运行了test中内容 ;
mvn package:将项目打包成可发布的文件,如jar或者war包; 
mvn install :发布项目到本地仓库 ;

mvn clean

clean命令的作用是清理项目编译或打包后生成的文件,具体对应maven项目中的target目录;

mvn compile

compile命令的作用是编译src/main/java中的java代码编译成可直接运行的class文件。编译完成后maven项目会自动创建一个target目录来存储这些文件。

mvn test

test命令的作用是编译并运行maven项目的src/test目录下的junit测试代码。

mvn package

package命令是将项目打包成可以发布的包。maven项目常见的打包方式有两种,maven的java project会打成jar包。maven的web project会打成war包。打包完成后将生成的文件存放在target目录中。

mvn install

1.3、在idea环境配置Maven,并创建Maven工程

说明:本案例操作的idea版本为2019.2,不同版本可能有稍许不同

第一步:打开default settings(对以后的新建工程生效):

第二步:配置maven_home和settings.xml的路径:

下面就开始创建我们的第一个maven工程了。

说明:使用maven创建的项目可分为3种类型:普通java项目,web项目和maven的父工程。 这三种项目对象的打包方式分别是:jar,war和pom。这里我们只讲普通的java项目和web项目的创建。maven的父工程在下面讲聚合的时候有。

开始咯!

1、使用maven创建普通的java工程

第一步:File–New–Project

第二步:选择maven然后下一步:

第三步:填写项目的坐标信息:

GroupID是项目组织唯一的标识符, 比如我的项目叫mavenDemoOne  那么GroupID应该 com.frank.mavenDemoOne   域名.公司名.项目名

ArtifactID就是项目的唯一的标识符, 一般是 项目名-xxx   比如mavenDemoOne-day01 

第四步:指定项目名称和路径:idea会把项目名中的- 去掉,我们给添加上即可。


最后点Finish(完成)就可以啦!

2、使用maven创建java web工程

第一步:先创建一个普通的java项目,参照上面完成即可

第二步:web项目的打包方式为war,打开maven项目的pom文件。在项目的坐标信息下添加标签,设置打包方式为war。

第三步:配置webapp目录和web.xml。打开Project Structure 视图

1.3.1、Maven工程pom.xml详解

pom(Project Object Model)指的是项目对象模型,用来描述当前的maven项目。

xxxxxxxxxx Setting.xml文件主要用于配置maven的运行环境等一系列通用属性,是全局级别的配置文件,而pom.xml文件主要描述项目的maven坐标,依赖关系,开发者需要遵循的规则,组织等与项目相关的因素,是项目级别的配置文件。

刚创建好的项目,默认的pom.xml文件,长这个样子,如下面代码所示:



    4.0.0

    com.frank.mavenDemoOne
    mavenDemoOne
    1.0-SNAPSHOT
    war

一般我们配置了依赖之后pom.xml长的样子如下面代码所示:



    4.0.0

    com.frank.mavenDemoOne
    mavenDemoOne
    1.0-SNAPSHOT

    war

    
    
        5.1.18
    

    
        
        
            junit
            junit
            RELEASE
        
        
        
            mysql
            mysql-connector-java
            ${mysql.connector.version}
            runtime
        
    

    
    
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.2
                
                    1.8
                    1.8
                    UTF-8
                
            
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.12.4
                
                    once
                    -Dfile.encoding=UTF-8
                

            
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                
                    
                    utf-8
                    80
                    /
                
            
        
    

1.4、Maven的高级特性(模块化、聚合等) 1.4.1、依赖管理 1.4.1.1、maven坐标

在**1.1.1、Maven简介**里面有详细的说明了,这里不做赘述

1.4.1.2、依赖导入

在**1.1.1、Maven简介**里面有详细的说明了,这里不做赘述

1.4.1.3、依赖配置

maven依赖配置里面有2个内容,一个是依赖范围设置,另一个是依赖版本维护。

1、依赖范围设置

依赖的jar默认情况可以在任何地方可用,我们通过标签设定作用范围,作用范围主要指以下三种:

(1)主程序范围有效(src/main目录范围内)

(2)测试程序范围内有效(src/test目录范围内)

(3)是否参与打包(package指令范围内)

标签的取值有五种,这四种取值与范围对应如下图所示:

示例代码:


  org.springframework
  spring-core
  4.3.9.RELEASE
  
  compile



  junit
  junit
  4.12
  test



  javax.servlet
  servlet-api
  2.5
  provided

2、依赖版本维护

如果pom文件中引入的依赖太多,各种依赖又有不同的版本,为了统一维护版本,我们可以将依赖的版本号抽取出来进行统一管理。具体操作的步骤如下:

第一步:在pom.xml中使用属性定义jar包的版本。如:


        4.13
        3.4.5

第二步 :在依赖的中使用${}引入前面定义好的版本


        
            junit
            junit
            ${junit.version}
            test
        

        
            org.mybatis
            mybatis
            ${mybatis.version}
            compile
        


1.4.2、依赖传递 1.4.2.1、什么是依赖传递

依赖传递:
当我们在我们的项目中引入一个jar包时
引入的jar包所依赖的jar也会跟着传递进来

在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。

通过上面的图可以看到,我们的web项目直接依赖了spring-webmvc,而spring-webmvc依赖了sping-aop、spring-beans等。最终的结果就是在我们的web项目中间接依赖了spring-aop、spring-beans等。

1.4.2.2、什么是依赖冲突
在一个项目中同时依赖了多个相同作用的jar,比如
    spring-aop : 5.0.2
    spring-aop : 5.0.5
    
    我们使用maven引入了Servlet的jar包
        
            javax.servlet
            javax.servlet-api
            3.1.0
        
    当我们把项目部署到tomcat服务器上时,会报jar包冲突
    因为在tomcat服务器中已经内置了servlet的jar,所以我们就得给javax.servlet的作用范围设置为provided
    这样就能解决这个冲突。

由于依赖传递现象的存在, spring-webmvc 依赖 spirng-beans-4.2.4,spring-aop 依赖 spring-beans-5.0.2,但是发现 spirng-beans-4.2.4 加入到了工程中,而我们希望 spring-beans-5.0.2 加入工程。这就造成了依赖冲突。

1.4.2.3、如何解决依赖冲突

1.使用maven提供的依赖调解原则 (自动)
1.1 依赖传递jar包,第一声明者优先原则
在pom.xml文件中,先声明哪个jar包,就以那个jar包为主.
1.2 路径近者优先原则
优先使用我们自己导入的jar包
依赖中传递的jar包排其次
直接依赖高于间接依赖

2.排除依赖,排除依赖的jar包,如下代码所示

  
        org.springframework
        spring-webmvc
        4.2.4.RELEASE
        
        
            
                org.springframework
                spring-core
            
        
    

3.锁定版本

 
    
        
            
                org.springframework
                spring-core
                5.0.2.RELEASE
            
        
    
    
    
    	
            org.springframework
            spring-core
        
    
1.4.3、maven项目模块化

在现实生活中,汽车厂家进行汽车生产时,由于整个生产过程非常复杂和繁琐,工作量非常大,所以车场都会将整个汽车的部件分开生产,最终再将生产好的部件进行组装,形成一台完整的汽车。

1.4.4、maven项目的继承

在Java语言中,类之间是可以继承的,通过继承,子类就可以引用父类中非private的属性和方法。同样,在maven工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的目的是为了消除重复代码。

1.4.5、maven项目的聚合

在maven工程的pom.xml文件中可以使用标签将其他maven工程聚合到一起,聚合的目的是为了进行统一操作

例如拆分后的maven工程有多个,如果要进行打包,就需要针对每个工程分别执行打包命令,操作起来非常繁琐。这时就可以使用标签将这些工程统一聚合到maven工程中,需要打包的时候,只需要在此工程中执行一次打包命令,其下被聚合的工程就都会被打包了。

2,总结

好好学好Java基础,冲冲冲

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764023.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号