• Java | Maven(知识点查询)



    Maven知识速查

    1. Maven概述

    • Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
    • POM(Project Object Model):项目对象模型
      在这里插入图片描述

    2. Maven的作用

    • 项目构建:提供标准的、跨平台的自动化项目构建方式
    • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
    • 统一开发结构:提供标准的、统一的项目结构(如下图:

    在这里插入图片描述

    3. Maven的下载

    :IDEA新版的直接自带Maven版本,用自带的也比较好。不然配置繁琐。

    4. Maven的环境配置

    1. 依赖 Java,需要配置 JAVA HOME
    2. 设置 MAVEN 自身的运行环境,需要配置 MAVEN_HOME
    3. 在Path中配置Maven的执行程序的路径(相信各位老道的 Java 选手已经会了)
    4. 测试环境配置结果

    MVN

    5. Maven 的基础组成

    5.1 Maven仓库
    • 仓库:用于储存 Jar 包,供给 Java 项目使用。

    • 仓库分类

      • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源

      • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源

        • 中央仓库:Mavenl团队维护,存储所有资源的仓库(https://repo1.maven.org/maven2/)

        • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源

    • 私服的作用

      • 保存具有版权的资源,包含购买或自主研发的jar
        • 中央仓库中的jar都是开源的,不能存储具有版权的资源
      • 一定范围内共享资源,仅对内部开放,不对外共享

    在这里插入图片描述

    5.1.1 本地仓库配置:
    Maven,启动后,会自动保存下载的资源到本地仓库
    < --! 默认位置>
    <localRepository>${user.home}/.m2/repositorylocalRepository>
    	当前目录位置为登录用户名所在目录下的.m2文件夹中
    <--! 自定义位置>
    <localRepository>D:\maven\repositorylocalRepository>
    	当前目录位置为D:maven repository.文件夹中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    5.1.2 中央仓库配置:
    • 在路径:C:\Users\ljcg.m2\settings.xml 中修改配置
    <repositories>
    	<repository>
    		<id>centralid>
    		<name>Central Repositoryname>
    		<url>https://repo.maven.apache.org/maven2url>
    		<layout>defaultlayout>
    		<snapshots>
    			<enabled>falseenabled>
    		snapshots>
    	repository>
    repositories>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    5.1.3 镜像仓库配置
    • 在路径:C:\Users\ljcg.m2\settings.xml 中修改配置
    <mirrors>
    	
    	<mirror>
    		
    		<id>nexus-aliyunid>
    		
    		<mirrorOf>centralmirrorOf>
    		
    		<name>Nexus aliyunname>
    		
    		<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
    	mirror>
    mirrors>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    5.2 Maven坐标
    • 坐标:Mavent中的坐标用于描述仓库中资源的位置(https://repo1.maven.org/maven2/)
    • 坐标的组成

    groupld(组织ID):定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)
    artifactld(项目ID):定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
    version(版本号):定义当前项目版本号
    packaging:定义该项目的打包方式

    • 坐标的作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

    6. Maven项目

    6.1 手工创建Maven项目
    • Maven工程目录

    在这里插入图片描述

    • 在src同层目录下创建pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0modelVersion>
    
      <groupId>org.examplegroupId>
      <artifactId>untitledartifactId>
      <version>1.0-SNAPSHOTversion>
      <packaging>jarpackaging>
    
      <name>untitledname>
      <url>http://maven.apache.orgurl>
    
      <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
      properties>
    
      <dependencies>
        <dependency>
          <groupId>junitgroupId>
          <artifactId>junitartifactId>
          <version>3.8.1version>
          <scope>testscope>
        dependency>
      dependencies>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    6.2 自动构建项目

    在这里插入图片描述

    • Tomcat7运行插件:
    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.apache.tomcat.mavengroupId>
    			<artifactId>tomcat7-maven-pluginartifactId>
    			<version>2.1version>
    			<configuration>
    				<port>80port>
    				<path>/path>
    			configuration>
    		plugin>
    	plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    7. Maven依赖管理

    7.1 依赖配置(版本规范)
    • pom.xml 文件中安装所需要的依赖
    • 格式:
    
    <dependencies>
    	
    	<dependency>
    		
    		<groupId>junitgroupId>
    		
    		<artifactId>junitartifactId>
    		
    		<version>4.12version>
    	dependency>
    dependencies>
    
    
    – SNAPSHOT:开发版本,表示该版本仍在开发中,可能会频繁改变。
    – RELEASE:发布版本,表示该版本为稳定版本,很少改变。(非SNAPSHOT的就是RELEASE)
    – ALPHA:内部测试版本,一般不供外部使用。
    – BETA:公开测试版本,可供外部测试并提供反馈。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    7.2 依赖传递
    • 依赖具有传递性
      • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
      • 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
    • 依赖传递冲突问题
      • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
      • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
      • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

    在这里插入图片描述

    7.3 可选依赖(不展示)
    • 可选依赖指对外隐藏当前所依赖的资源一一不透明
    • 格式:
    <dependency>
    	<groupId>junitgroupId>
    	<artifactId>junitartifactId>
    	<version>4.12version>
        
    	<optional>trueoptional>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    7.4 排除依赖(不需要)
    • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本一一不需要
    <dependency>
    	<groupId>junitgroupId>
    	<artifactId>junitartifactId>
    	<version>4.12version>
        
    	<exclusions>
    		<exclusion>
    			<groupId>org.hamcrestgroupId>
    			<artifactId>hamcrest-coreartifactId>
    		exclusion>
    	exclusions>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    7.5 依赖范围
    • 依赖的jar默认情况可以在任何地方使用,可以通过 scope 标签设定其作用范围
    • 格式:
    <scope>compilescope>
    
    • 1
    • 作用范围:
      • 主程序范围有效(main文件夹范围内)
      • 测试程序范围有效(test文件夹范围内)
      • 是否参与打包(package指令范围内)

    在这里插入图片描述

    7.6 依赖范围传递
    • 带有依赖范围的资源在进行传递时,作用范围将受到影响

    在这里插入图片描述

    8. Maven生命周期与插件

    8.1 Maven生命周期
    • Maven构建生命周期描述的是一次构建过程经历经历了多少个事件

    在这里插入图片描述

    8.2 Maven插件
    • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
    • 默认maven在各个生命周期上绑定有预设的功能
    • 通过插件可以自定义其他功能
    
    <build>
    	<plugins>
    		<plugin>
    			<groupId>org.apache.maven.pluginsgroupId>
    			<artifactId>maven-source-pluginartifactId>
    			<version>2.2.1version>
    			<executions>
    				<execution>
    					<goals>
                            
    						<goal>jargoal>
                            <goal>test-jargoal>
    					goals>
                        
    					<phase>generate-test-resourcesphase>
    				execution>
    			executions>
    		plugin>
    	plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    红日靶场vulnstack1 内网渗透学习
    蓝桥杯第1167题——荷马史诗
    中国高分辨率高质量PM2.5数据集2000-2021
    解决git diff时的^M问题
    从驾考科目二到自动驾驶,聊聊 GPU 为什么对自动驾驶很重要
    mysql与jdbc笔记
    Java进阶学习
    给ChuanhuChatGPT 配上讯飞星火spark大模型V2.0(一)
    树莓派系统的安装教程
    代理模式-静态动态代理-jdk动态代理-cglib动态代理
  • 原文地址:https://blog.csdn.net/qq_52099094/article/details/133438911