Maven本质及使用

本文围绕Maven展开,介绍了其安装方法,包括本地、远程、私服、中央仓库等。阐述了常用命令,如清理、编译、测试、打包等。还讲解了约定目录结构、POM、坐标、依赖、继承、聚合等概念,以及自动构建和打包自定义工具pom依赖的相关内容。
是什么
1. maven是一款服务于java平台的自动化构建工具
		Maek -> Ant -> Maven -> Gradle
2. 构建
		编译 -> 部署 ->  搭建
	Ⅰ. 一个BS项目最终运行的并不是动态Web工程本身,而是该工程'编译的结果'。
		所以,开发过程中,所有的路径或配置文件中配置的类路径(classes)都是以编译结果的目录结构为标准。
	Ⅱ. 构建过程
		Ⅰ.清理:删除上次编译后的就class字节码文件
		Ⅱ.编译:将java源代码转为class字节码文件
		Ⅲ.测试:自动测试,自动调用junit程序
		Ⅳ.报告:测试程序执行的结构
		Ⅴ.打包:动态Web程序打成war包,Java工程打成jar包
		Ⅵ.安装:将打包后的文件复制到“仓库”中指定位置
		Ⅶ.部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
安装Maven
1. 安装java环境
		由于maven是java开发的
2. 下载安装mavaen
	历史版本下载:http://archive.apache.org/dist/maven/maven-3/3.5.3/binaries/
		只需要替换想要的版本号即可
4. 配置maven环境变量
		M2_HOME:安装路径
		path:%M2_HOME%\bin
5. 验证
		mvn -v查看Maven版本信息
仓库
  • 本地仓库:当前本机电脑的maven仓库

  • 远程仓库:

    • 私服:架设在当前局域网环境下,为当前局域网范围内的所有用户提供服务
    • 中央仓库:架设在Internet上,为全世界所有Maven使用者服务
    • 中央仓库的镜像:架设在各大洲,为中央仓库分流。减轻中央仓库的压力,同时能更快的响应用户请求
  • 仓库中保存的内容

    • Maven自身所需要的插件
    • 第三方框架或工具的jar包
    • 自己开发的maven工程
  • 配置阿里云镜像仓库

    <!--在setttins.xml文件中找到<mirrors></mirrors>标签对,进行修改-->
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
    
常用命令

执行与构建过程相关的maven命令,必须进入pom.xml文件所在的目录

  • 命令
    • mvn clean:清理
    • mvn compile:编译主程序
    • mvn test-compile:编译测试程序
    • mvn test:执行测试
    • mvn package:打包
    • mvn install:安装
约定的目录结构
1. maven项目必须遵循的项目目录结构,才能实现自动化
		项目名
			src
				main
					java
					resources
				test
					java
					resources
			pom.xml
2. 约定(架构) > 配置(框架) > 编码
POM

Project Object Model 项目对象模型

坐标

Maven使用三个向量在仓库中定义唯一的工程

  • 三个向量
    • groupid:公司或组织域名倒叙
    • artifactid:模块名
    • version:版本
<groupId></groupId>
<artifactId></artifactId>
<version></version>
依赖
  • maven解析依赖信息时会去本地仓库中查找被依赖的jar包

    • 自己开发的maven工程,需要执行mvn install命令安装到仓库后才可被别的工程依赖
  • 依赖范围(scope)

    compiletestprovided
    对主程序是否有效☑️☑️
    对测试程序是否有效☑️☑️☑️
    是否参与打包☑️
    • provided的包在部署环境不再需要,由tomcat等容器提供。如:servlet-api.jar等
  • 依赖传递性

    • 依赖具有传递性,底层工程加入的包,所有依赖该工程的工程也会被加入该包
    • 注意:非compile范围的依赖不能传递
    • 传递原则:路径最短优先,
      • 当有依赖冲突时会最先选择依赖路径最短的包
        • 工程自身配置的依赖优先级最高
        • 直接依赖的传递依赖次之
        • 传递依赖的依赖优先级最低
      • 当有路径相同的冲突依赖时,依赖标签最先声明的优先
  • 依赖的排除

    • 排除dependency直接依赖里传递的其他某个依赖
    <dependencies>
    	<dependency>
            <goupId></goupId>
            <artifactId>直接依赖</artifactId>
            <version>1.0</version>
            <scope>compile</scope>
        	<exclusions>
                <exclusion>
                    <groupId></groupId>
                    <artifactId>排除直接依赖中依赖的某个别的依赖</artifactId>
                </exclusion>
       	 	</exclusions>
        </dependency>
    </dependencies>
    
    
  • 依赖统一管理

    • 使用properties标签自定义统一标签
    • 使用${自定义标签}引用声明
    <properties>
    	<自定义标签>1.0.0.RELAEASE</自定义标签>
    </properties>
    
继承
  • 统一管理各个模块工程中某个依赖的版本

    父工程中统一设定依赖的版本号,子工程中声明该依赖时不再指定版本

    • 父工程的打包方式为:pom

      <packaging>pom</packaging>
      jar为java程序
      war为web程序
      
    • 父工程中配置依赖的管理

      // 父工程坐标
      <groupId>父工程域名</groupId>
      <artifactId>父工程名</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      // 父工程打包方式
      <packaging>pom</packaging>
      
      // 父工程依赖管理
      <dependencyManagement>
      	<dependencies>
              // 父工程统一管理的依赖,父工程并不会真正去加载该依赖
          	<dependency>
              	<groupId>junit</groupId>
                  <artifactId>junit</artifactId>
              	<version>4.0</version>
                  <scope>test</scope>
              </dependency>
          </dependencies>
      </dependencyManagement>
      
      • 子工程只需声明groupId、artifactId,不再声明version。统一使用父工程指定的版本

        • 子工程引入父工程
        // 子工程引入父工程
        <parent>
        	<groupId>父工程域名</groupId>
            <artifactId>父工程名</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            #以当前文件为基本的父工程pom文件的相对路径
            <relativePath>../父工程项目名/pom.xml</relativePath>
        </parent>
        
        <dependencies>
                // 子工程依赖,不再指定版本
            	<dependency>
                	<groupId>junit</groupId>
                    <artifactId>junit</artifactId>    	
                    <scope>test</scope>
                </dependency>
        </dependencies>
        
    • 配置继承后,install时需要先安装父工程,再安装子工程

聚合
  • 目的:为了一键自动安装整个项目的父子工程
    • 集合后只需要在父工程instaill,maven会自动按继承关系将整个项目顺序进行install
<!-- 父工程中配置聚合工程 -->
<modules>
    <!-- 指定需要聚合的所有子工程。子工程的依赖继承顺序无所谓,maven会自动识别关系。-->
	<module>../子工程1</module>
    <module>../子工程2</module>
</modules>
自动构建
<!-- 配置当前工程构建过程中的特殊设置 -->
<build>
    <!-- 工程打包的最终名称 -->
    <finalName></finalName>
    <!-- 配置当前工程构建过程需要使用的插件 -->
	<plugins>
    	<plugin>
        	<groupId>插件包</groupId>
    		<artifactId>插件名</artifactId>
   			<version>插件版本</version>
        </plugin>
    </plugins>
</build>
打包自定义工具pom依赖
1. 先将自定义工具项目打包为jar文件
2. 执行mvn install命令生成pom
mvn install:install-file -DgroupId=com.wangl.util -DartifactId=export -Dversion=1.0.0 -Dfile=E:\export\target\export-1.0-SNAPSHOT.jar -Dpackaging=jar
3. 命令详解
mvn install:install-file
     -DgroupId=com.wangl.util     		#这个是引用的包名 ,相当于 groupId
     -DartifactId=export            	#这个是引用的名称 ,相当于 artifactId
     -Dversion=1.0.0                    #这个是引用的版本,相当于 version
     -Dfile=E:\export\com.xxx.jar 		#这个是jar包文件所在的位置
     -Dpackaging=jar                 	#这个是打包类型
4. maven项目依赖自定义工具,pom.xml文件引用如下
	<dependencies>
	  	<dependency>
	  		<groupId>com.wangl.util</groupId>
	  		<artifactId>export</artifactId>
	  		<version>1.0.0</version>
	  	</dependency>
  </dependencies>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值