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

2022-06-24 Maven基础(够用)

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

2022-06-24 Maven基础(够用)

准备资源:jdk1.8、apache-maven-3.6.3、idea2019.3.3

一、Maven概述
  1. 什么是Maven?
    Maven是一款自动化构建工具,服务于Java平台的项目构建和依赖管理。
  2. 特点
    (1) 方便添加第三方jar包
             添加jar包的传统方式是将需要的jar包拷贝复制到项目下的lib目录中,这样做会让项目占用空间变的很大。Maven使用pom文件来维护项目需要使用的jar包,程序会根据pom中维护的依赖坐标自动从本地仓库加载并使用jar包。
    (2) 方便获取第三方jar包
             传统方式需要我们自己在上网查找jar包资源,下载到本地,然后添加到项目中。Maven中,我们只要将需要的jar包坐标写入pom文件中,Maven就会自动到外网的中心仓库中将jar包下载到本地仓库中。
    (3) 自动处理jar包之间的依赖关系
             当一个jar包依赖其他的jar包时,Maven会自动将所依赖的jar包从本地仓库导入,如果本地仓库不存在,就会从外网的中央仓库将依赖下载到本地,然后导入项目。
    (4) 自动处理jar包之间的冲突关系
             当两个或者更多个jar包都依赖同一种jar包,但是所依赖的jar包版本号不同的时候,Maven会自动去解决这种冲突关系。处理原则是:最短路径者优先和先声明者优先。
    (5) 能够将一个项目拆分成多个模块
    (6) 实现项目的分布式部署
二、Maven安装
  1. 安装配置Java:
    (1)使用引导程序安装java1.8,记录安装目录
    (2) 配置系统环境变量JAVA_HOME、PATH

    系统环境变量名	取值							例子
    JAVA_HOME		java安装目录					C:Program FilesJavajdk1.8.0_311
    PATH			末尾添加:%JAVA_HOME%/bin	%JAVA_HOME%/bin
    
  2. 安装配置Maven
    (1) 解压Maven压缩包,记录解压位置
    (2) 配置系统环境变量MAVEN_HOME、PATH

    系统环境变量名	取值								例子
    MAVEN_HOME		Maven解压位置根目录				D:moudleapache-maven-3.6.3
    PATH			末尾添加:%MAVEN_HOME%/bin		%MAVEN_HOME%/bin
    

    (3) 配置本地仓库地址和外网中央仓库地址
             用文本编辑器打开%MAVEN_HOME%/conf/settings.xml,在settings标签内第一行添加

      
      
      D:moudleapache-maven-3.6.3repository
      
    

             找到mirrors标签,在标签内部添加

    	
    	 
    		alimaven
    		aliyun
    		https://maven.aliyun.com/repository/central
    		central
    	 
    
  3. 验证安装是否成功
    (1) 打开cmd窗口
    (2) cmd窗口中输入:mvn -v

    cmd打印上述输出,表示Java和Maven都安装成功。

  4. 与Idea集成
    (1)打开idea

    (2)Configure --> Settings

    (3)Build,Execution,Deployment --> Build Tools --> Maven
    (4)设置Maven home directory、User settings file、Local repository

    配置项名								解释
    Maven home directory				MAVEN_HOME
    User settings file					%MAVEN_HOME%/conf/settings.xml
    Local repository					本地仓库位置
    

三、Maven核心概念
  1. pom.xml文件:Project Object Model:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。

  2. 约定的目录结构,不能随意修改

  3. 坐标
    (1)定义: jar包的唯一标识

    属性名			说明									例子
    groupId			公司或者组织的域名倒序+项目名称			com.company.project-name
    artifactId		要引入的jar包所属项目的模块名称			moudle-name
    version			版本号								4.12
    

    (2)如何通过坐标查找jar包?
             将groupId、artifactId、version三个向量连起来,以连起来的字符串作为目录结构到仓库中寻找,例如:

    												
    com.company.project-name
    moudle-name			==>		com/company/project-name/moudle-name/4.12/moudle-name-4.12.jar	
    4.12
    
  4. 依赖管理
    (1) 概念:当A.jar需要使用B.jar中的类的时候,就说A依赖于B。
    (2)依赖分类:
             a. 直接依赖:A.jar直接使用C.jar中的类,此时A直接依赖于C;
             b. 间接依赖:A.jar直接依赖于B.jar,B.jar直接依赖于C.jar,如果A.jar需要使用C.jar中的类时,此时就说A间接依赖于C;
    (3)依赖范围:

    依赖范围					解释
    compile(全部编译)		main目录下的Java代码可以访问这个范围下的依赖,会将该范围下的依赖也一并打入jar包
    test(只用于测试)		    只有test目录下的Java代码可以访问这个范围下的依赖,不会将该范围下的依赖一并打入jar包
    provided(已由服务器提供)  main和test目录下的Java代码都可以访问这个范围下的依赖,不会将改范围下的依赖一并打入jar包,这些依赖应该由运行jar包的服务器提供
    

    使用方式为:

    
    		
    	
    		com.company.project-name
    		moudle-name
    		4.12
    		test 
    												
    
    

    (4)依赖的传递性
             当间接依赖的jar包使用compile范围导入时,其他间接依赖该jar包的模块才能访问该jar包。例如:

    依赖关系						B引入C的依赖范围			C对A的可见性
    							compile					可见
    A 依赖于 B 依赖于 C			test					不可见
    							provided				不可见
    

    (5)依赖原则 => 解决jar包冲突
             a. 路径最短者优先

             b. 先声明者优先

             模块A的pom.xml文件中引入B和C的代码如果是:

    
    	
    	
    		...
    	
     
    	
    	
    		...
    	
    
    

             那么依赖关系为:

             模块A的pom.xml文件中引入B和C的代码如果是:

    
    	
    	
    		...
    	
     
    	
    	
    		...
    	
    
    

             那么依赖关系为:

    (6)依赖的排除
             当模块A依赖于B.jar(或者更多jar包)时,如果在A模块中不想引入B.jar(或者其他jar包)所依赖的其他jar包时,可以不引入B.jar(或者其他jar包)所依赖的其他jar包。
             使用方式为:

    
    	
    	
    		com.company.project-name
    		B
    		1.0
    		compile
    		
    		
    		
    			
    			
    				com.company.project-name
    				moudle-name
    			
    
    			
    			...
    			...
    			...
    			...
    		
    	
    	
    	
    	
    		com.company.project-name
    		moudle-name
    		2.2
    		compile
    	
    	
    	
    	...
    	...
    	...
    	...
    
    

    (7)在一个模块中,统一指定版本号
             有一些jar包必须联合使用,是一整套的,每个jar包的版本号最好相同,不然会出兼容性问题。但是当某一套jar包数量太多时,修改版本号不方便,此时就可以统一指定版本号。
             pom.xml文件中应如下配置:

    
    ...
    
    
    
    	
    	4.0.0.RELEASE
    
    	
    	...
    	...
    	...
    
    
    
    
    	
    	
    	    org.springframework
    	    spring-webmvc
    	    
    	    ${spring-version} 
    	
    	
    	    org.springframework
    	    spring-jdbc
    	    
    	    ${spring-version} 
    	
    	
    	    org.springframework
    	    spring-orm
    	    
    	    ${spring-version} 
    	
    
    

    (8)仓库
             a. 本地仓库:settings.xml中配置的存放jar包的本机文件路径;
             b. 远程仓库:

    远程仓库类型	说明
    私服			架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务,修改localRepository 
    中央仓库		架设在Internet上,为全世界所有Maven工程服务
    中央仓库镜像	架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求
    

    (9)主要生命周期
             完整的生命周期是:
             clean=>validate=>compile=>test=>package=>verify=>install=>site=>deploy

    生命周期		作用
    clean		清除
    compile		clean + 中间的生命周期 + 编译main下的Java文件
    test		clean + 中间的生命周期 + 编译test下的Java文件,并执行
    package		clean + 中间的生命周期 + 打包
    install		clean + 中间的生命周期 + 将打好的jar包放在本地仓库中,放在本地仓库之后,就可以在其他模块的pom文件中引入该jar包
    

    (11)插件
             Maven生命周期的作用是由插件提供的功能,每个插件可能提供多个功能,比如:

             complier插件提供了三个功能。

四、继承
  1. 什么是继承
             父模块统一管理依赖的版本号,所有子模块引入同一种依赖后,都使用父模块中声明的依赖版本号。
  2. 为什么使用继承
             有一些依赖的依赖范围不需要为compile,这些依赖一旦成为间接依赖,其他模块想要使用,就都需要单独配置,可以使用继承统一版本号,需要进行修改的时候,只需要修改父模块pom.xml文件中维护的版本号即可。
  3. 配置方式
    (1)手动配置:
             a. 项目结构为:

             b. 在parent模块的pom.xml文件中进行配置:
    
    ...
    
    
    pom
    
    
    
    	
    	
    		
    		
    			
    			junit
                junit
                4.12
                test
    		
    		
    		
    		...
    		...
    		...
    		...
    	
    
    

         c. 在子模块的pom.xml文件中进行配置:
         child1模块的pom.xml文件配置(child2一样):


...



	com.company.project-name
	parent
	1.0
	
	../parent/pom.xml




	
	
		junit
		junit
	

	
	...
	...
	...
	...

(2)Idea自动配置:

五、聚合
  1. 什么是聚合
             父模块下有很多个子模块,可以将所有子模块的构建工作(执行各个生命周期)交给父模块统一处理。

  2. 配置方法
             在父模块的pom.xml文件中配置:

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

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

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