首页 > 编程语言 >【Java基础】Maven入门笔记

【Java基础】Maven入门笔记

时间:2024-03-03 17:11:50浏览次数:23  
标签:依赖 Java 入门 工程 项目 -- Maven 构建

本篇笔记参考尚硅谷Maven课程,概括总结了Maven的核心功能

Maven仓库地址:Maven Repository: Search/Browse/Explore


一、Maven简介

1. Maven 是一个依赖管理工具、构建工具

2. Maven介绍

Maven 是一款为 Java 项目管理构建、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。

  • 依赖管理:管理项目的依赖,下载依赖的依赖,保证以来之间没有冲突

  • 构建管理:项目构建是指将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序或库的过程Maven 可以管理项目的编译、测试、打包、部署等构建过程。通过实现标准的构建生命周期,Maven 可以确保每一个构建过程都遵循同样的规则和最佳实践。

  • Maven架构
    Maven架构

二、Maven安装和配置

安装完成后,修改maven/conf/settings.xml配置文件,来修改maven的一些默认配置【本地仓库地址、配置阿里镜像、配置jdk17版本项目构建】

三、基于IDEA创建Maven工程

GAV:GroupID(com.公司.业务线.子业务线), ArtifactID(产品线名-模块名), Version

Packaging定义规则:jar, war, pom(不打包,用来做继承的父工程)

maven项目结构,及各文件的作用

    |-- pom.xml                               # Maven 项目管理文件 
    |-- src
        |-- main                              # 项目主要代码
        |   |-- java                          # Java 源代码目录
        |   |   `-- com/example/myapp         # 开发者代码主目录
        |   |       |-- controller            # 存放 Controller 层代码的目录
        |   |       |-- service               # 存放 Service 层代码的目录
        |   |       |-- dao                   # 存放 DAO 层代码的目录
        |   |       `-- model                 # 存放数据模型的目录
        |   |-- resources                     # 资源目录,存放配置文件、静态资源等
        |   |   |-- log4j.properties          # 日志配置文件
        |   |   |-- spring-mybatis.xml        # Spring Mybatis 配置文件
        |   |   `-- static                    # 存放静态资源的目录
        |   |       |-- css                   # 存放 CSS 文件的目录
        |   |       |-- js                    # 存放 JavaScript 文件的目录
        |   |       `-- images                # 存放图片资源的目录
        |   `-- webapp                        # 存放 WEB 相关配置和资源
        |       |-- WEB-INF                   # 存放 WEB 应用配置文件
        |       |   |-- web.xml               # Web 应用的部署描述文件
        |       |   `-- classes               # 存放编译后的 class 文件
        |       `-- index.html                # Web 应用入口页面
        `-- test                              # 项目测试代码
            |-- java                          # 单元测试目录
            `-- resources                     # 测试资源目录

四、基于IDEA进行Maven工程构建

构建的概念:将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

构建命令:

命令 描述
mvn compile 编译项目,生成target文件按
mvn package 打包项目,生产jar或者war
mvn clean 清理编译或打包后的项目结构
mvn install 打包后上传到maven仓库
mvn deploy 只打包,上传到maven私服仓库
mvn site 生成站点
mvn test 执行测试源码

项目生命周期:清理 - 编译 - 测试 - 报告 - 打包 - 部署

  • 执行后一周期,前一周期会自动执行

五、基于IDEA 进行Maven依赖管理

依赖管理:能够帮助开发人员自动解决软件包依赖问题,使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中,避免出现版本冲突和依赖缺失等问题。

定义pom文件,GAVP,(groupId, artifactId, version, packaging)

配置依赖范围<scope>):compile, test, provided, runtime, system, import

  • compile:编译依赖范围,缺省值

  • test:测试依赖范围,如 junit 依赖只有在测试时有效

  • provided:已提供依赖范围,如 servlet-api 依赖对于编译、测试阶段而言是需要的,但是运行阶段,已有外部服务提供

  • runtime:运行时依赖范围,如 JDBC

  • system:系统依赖范围,和 provided 类似,只能在当前系统中使用,项目可移植性降低

  • import:导入依赖范围,与dependencyManagement配合使用,用于合并 pom.xml

配置依赖插件build/plugins/plugin标签下引入插件

六、Maven依赖传递和依赖冲突

1. Maven传递依赖

  • 如果Maven有如下依赖关系:C->B->A,则有C->A

  • 只有在编译【compile】时起作用的依赖,能够进行传递

  • 如果需要停止进行以来传递,则在<dependency>下配置<optional>标签

2. Maven冲突解决

  1. 自动选择原则

    • 短路优先原则(第一原则)

      • A—>B—>C—>D—>E—>X(version 0.0.1)

      • A—>F—>X(version 0.0.2)

      • 则A依赖于X(version 0.0.2)。

    • 依赖路径长度相同情况下,则“先声明优先”(第二原则)

      • A—>E—>X(version 0.0.1)

      • A—>F—>X(version 0.0.2)

      • 在<depencies></depencies>中,先声明的,路径相同,会优先选择!

  2. 手动排除

    <dependency>
      <groupId>com.atguigu.maven</groupId>
      <artifactId>pro01-maven-java</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
      <!-- 使用excludes标签配置依赖的排除  -->
      <exclusions>
        <!-- 在exclude标签中配置一个具体的排除 -->
        <exclusion>
          <!-- 指定要排除的依赖的坐标(不需要写version) -->
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    

七、Maven工程继承和聚合关系

1. Maven工程继承关系

  • 继承概念:Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。

  • 继承作用:在父工程中统一管理项目中的依赖信息。

    • 使用父工程对子工程中的配置信息进行统一管理

    • 父工程中设置的依赖,在子工程中可以使用

  • 父工程依赖统一管理:父工程pom文件,使用<dependencyManagement>标签,子工程需要选择使用的依赖,子工程不会继承父工程所有的依赖,推荐使用!

2. Maven工程聚合关系

  • 聚合概念:Maven 聚合是指将多个项目组织到一个父级项目中,以便一起构建和管理的机制。聚合可以帮助我们更好地管理一组相关的子项目,同时简化它们的构建和部署过程。

  • <!--  父工程中配置, child-project1是一个相对路径  -->
        <modules>
        <module>child-project1</module>
        <module>child-project2</module>
      </modules>
    

八、Maven私服

标签:依赖,Java,入门,工程,项目,--,Maven,构建
From: https://www.cnblogs.com/syr463/p/18050305

相关文章

  • Java笔记:Lambda表达式
    Lambda表达式在Java中是函数式编程的一种体现,允许把函数作为一个方法的参数传递进方法中,或者将函数作为方法的返回值。1.语法和基础使用语法://Lambda实现是一个简单的表达式(parameters)->expression;//Lambda实现是一个函数体(parameters)->{statements;}paramet......
  • Open vSwitch 入门实践
    OpenvSwitch入门实践 OpenvSwitch入门实践(1)简介来源 https://zhuanlan.zhihu.com/p/336487371OVS简介OpenvSwitch是什么?OpenvSwitch(以下简称OVS)是一个用C语言开发的多层虚拟交换机,使用Apcahe2开源许可证,现如今基本上已经成为了开源SDN(软件定义网络)基础设施层的......
  • java - 流式编程
    1.获取流的方法://1.从集合转化List<Integer>list=newArrayList<>();Stream<Integer>stream=list.stream();//转化为流stream.Collect(Collectors.toList());//转换为流,流再转回为集合。//2.自定义初始化Stream<Integer>stream=Stream.of(1,5,6,4,8,3,1,9); 2......
  • 新电脑装编程配置(jdk、MySQL、navicat、idea、Maven、gitee、环境配置)
    一、JDK(java运行环境,不安装不能在自己电脑上运行java语言)1.打开安装包     2.选择安装目录(建议选择非系统盘)      3.安装JRE(最好和JDK分开文件夹、建议选择非系统盘)     4.提示安装成功     配置环境变量:JAVA......
  • Java数组
    Java数组一、什么是数组数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。【数组下标从0开始】二、数组声明创建首先必须声明数组变量,才能在程......
  • Java学习笔记——第四天
    数组数组是什么数组就是一个容器,用来存一批同种类型的数据。数组有什么用遇到批量数据的存储和操作时,数组比变量更适合。代码简洁,逻辑清晰。数组的定义静态初始化数组定义数组的时候直接给数组赋值。格式1(完整格式)数据类型[]数组名=new数据类型[]{元素1,元素2,元素3…......
  • Java中类与类、类与接口、接口与接口之间是什么关系?
    Java中类与类之间是什么关系?1.依赖依赖是指一个类(称为依赖类)使用到了另一个类(称为被依赖类),而这种使用关系是具有偶然性的、临时性的、非常弱的,但是被依赖类(目标类)的变化会影响到依赖类。例如,比如人A要过河,需要借用一条船B,此时人A与船B之间的关系就是依赖。表现在代码层面,为类B......
  • Java方法
    何为方法Java方法是语句的集合,它们在一起执行一个功能,方法包含于类或对象中,方法在程序中被创建,在其他地方被引用设计方法的原则:保持方法的原子性-一个方法只完成1个功能,这样利于后期的拓展publicclassDemo01{publicstaticvoidmain(String[]args){ints......
  • maven 包管理平台-05-multi module 多模块
    拓展阅读maven包管理平台-01-maven入门介绍+Maven、Gradle、Ant、Ivy、Bazel和SBT的详细对比表格maven包管理平台-02-windows安装配置+mac安装配置maven包管理平台-03-mavenprojectmaven项目的创建入门maven包管理平台-04-mavenarchetype项目原型maven包......
  • 「java.util.concurrent并发包」之 Unsafe
    一unsafe介绍Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C......