当前位置: 首页 > news >正文

Maven学习(零基础到面试)

1.什么是Maven?

        maven是一款用于管理和构建java项目的工具

2.Maven的作用?

        1.依赖管理:方便快捷的管理项目以来的资源(jar包),避免版本冲突问题。

                以前的项目需要创建lib包,将网上的jar包资源放入其中使用,但是开发后期太过繁琐并且可能出现版本冲突问题

        2.统一项目结构:提供标准,统一的项目结构。

                因为不同编译器创建出来的项目会有不同,eclipse创建出来的项目在idea中无法直接使用。而使用maven会提供一套都能够使用的统一项目结构

        3.项目构建:标准跨平台的自动化项目构建工具。

                可以通过一些maven指令快速进行项目的清理,编译,测试,打包,发布的操作

Maven的介绍:

        maven是一款项目管理和构建工具,它及用户项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。

官网:Maven – Welcome to Apache Maven

        作用:

                1.方便的依赖管理

                2.统一的项目结构

                3.标准的项目构建流程

maven的pom.xml文件中:

       maven坐标:groupId组织名,artifactId当前模块名称,version版本

maven仓库;

        用于存储资源,管理各种jar包

        本地仓库:自己计算机上的一个目录

        中央仓库:maven团队维护的全球唯一仓库

        远程仓库:公司团队搭建的私有仓库

Maven的安装:

        在官网Maven – Welcome to Apache Maven中下载新版的maven并且解压到英文目录下。

        在conf/setting.xml中添加

  <localRepository>D:\download\apache-maven-3.9.9-bin\apache-maven-3.9.9\mvn_repo</localRepository>

        和添加

  <mirrors><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>

然后配置环境变量:MAVEN_HOME,在环境变量中添加

并且添加Path

在idea中打开setting/Build,Execution,Deployment/Build Tools/Maven下进行maven的配置即可使用。

相关面试题:

1.什么是Maven

maven是一款用于管理和构建java项目的工具

2.什么是 POM?

每一个 Maven 工程都有一个 pom.xml 文件,位于根目录中,包含项目构建生命周期的详细信息。通过 pom.xml 文件,我们可以定义项目的坐标、项目依赖、项目信息、插件信息等等配置。

3.Maven 的主要作用有哪些?

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

4.maven坐标:

项目中依赖的第三方库以及插件可统称为构件。每一个构件都可以使用 Maven 坐标唯一标识,坐标元素包括:

  • groupId(必须): 定义了当前 Maven 项目隶属的组织或公司。groupId 一般分为多段,通常情况下,第一段为域,第二段为公司名称。域又分为 org、com、cn 等,其中 org 为非营利组织,com 为商业组织,cn 表示中国。以 apache 开源社区的 tomcat 项目为例,这个项目的 groupId 是 org.apache,它的域是 org(因为 tomcat 是非营利项目),公司名称是 apache,artifactId 是 tomcat。
  • artifactId(必须):定义了当前 Maven 项目的名称,项目的唯一的标识符,对应项目根目录的名称。
  • version(必须):定义了 Maven 项目当前所处版本。
  • packaging(可选):定义了 Maven 项目的打包方式(比如 jar,war...),默认使用 jar。
  • classifier(可选):常用于区分从同一 POM 构建的具有不同内容的构件,可以是任意的字符串,附加在版本号之后。

如果使用 Maven 构建产生的构件(例如 Jar 文件)被其他的项目引用,那么该构件就是其他项目的依赖。

<project><dependencies><dependency><groupId></groupId><artifactId></artifactId><version></version><type>...</type><scope>...</scope><optional>...</optional><exclusions><exclusion><groupId>...</groupId><artifactId>...</artifactId></exclusion></exclusions></dependency></dependencies>
</project>

配置说明

  • dependencies:一个 pom.xml 文件中只能存在一个这样的标签,是用来管理依赖的总标签。
  • dependency:包含在 dependencies 标签中,可以有多个,每一个表示项目的一个依赖。
  • groupId,artifactId,version(必要):依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven 根据坐标才能找到需要的依赖。我们在上面解释过这些元素的具体意思,这里就不重复提了。
  • type(可选):依赖的类型,对应于项目坐标定义的 packaging。大部分情况下,该元素不必声明,其默认值是 jar。
  • scope(可选):依赖的范围,默认值是 compile。
  • optional(可选):标记依赖是否可选
  • exclusions(可选):用来排除传递性依赖,例如 jar 包冲突

依赖范围

classpath 用于指定 .class 文件存放的位置,类加载器会从该路径中加载所需的 .class 文件到内存中。

Maven 在编译、执行测试、实际运行有着三套不同的 classpath:

  • 编译 classpath:编译主代码有效
  • 测试 classpath:编译、运行测试代码有效
  • 运行 classpath:项目运行时有效

Maven 的依赖范围如下:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
  • provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如 servlet-api.jar 在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。
  • runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
  • system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。

依赖范围

classpath 用于指定 .class 文件存放的位置,类加载器会从该路径中加载所需的 .class 文件到内存中。

Maven 在编译、执行测试、实际运行有着三套不同的 classpath:

  • 编译 classpath:编译主代码有效
  • 测试 classpath:编译、运行测试代码有效
  • 运行 classpath:项目运行时有效

Maven 的依赖范围如下:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
  • provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如 servlet-api.jar 在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。
  • runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
  • system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。

依赖范围

classpath 用于指定 .class 文件存放的位置,类加载器会从该路径中加载所需的 .class 文件到内存中。

Maven 在编译、执行测试、实际运行有着三套不同的 classpath:

  • 编译 classpath:编译主代码有效
  • 测试 classpath:编译、运行测试代码有效
  • 运行 classpath:项目运行时有效

Maven 的依赖范围如下:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
  • provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如 servlet-api.jar 在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。
  • runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
  • system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。

依赖范围

classpath 用于指定 .class 文件存放的位置,类加载器会从该路径中加载所需的 .class 文件到内存中。

Maven 在编译、执行测试、实际运行有着三套不同的 classpath:

  • 编译 classpath:编译主代码有效
  • 测试 classpath:编译、运行测试代码有效
  • 运行 classpath:项目运行时有效

Maven 的依赖范围如下:

Maven 的依赖范围如下:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
  • provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如 servlet-api.jar 在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。
  • runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
  • system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。
  • 依赖范围

    classpath 用于指定 .class 文件存放的位置,类加载器会从该路径中加载所需的 .class 文件到内存中。

    Maven 在编译、执行测试、实际运行有着三套不同的 classpath:

  • 编译 classpath:编译主代码有效
  • 测试 classpath:编译、运行测试代码有效
  • 运行 classpath:项目运行时有效
  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种都有效,即在编译、测试和运行的时候都要使用该依赖 Jar 包。
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试,而在编译和运行项目时无法使用此类依赖,典型的是 JUnit,它只用于编译测试代码和运行测试代码的时候才需要。
  • provided:此依赖范围,对于编译和测试有效,而对运行时无效。比如 servlet-api.jar 在 Tomcat 中已经提供了,我们只需要的是编译期提供而已。
  • runtime:运行时依赖范围,对于测试和运行有效,但是在编译主代码时无效,典型的就是 JDBC 驱动实现。
  • system:系统依赖范围,使用 system 范围的依赖时必须通过 systemPath 元素显示地指定依赖文件的路径,不依赖 Maven 仓库解析,所以可能会造成建构的不可移植。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Qt窗口】—— 浮动窗口
  • DARKTIMES集成到Sui,带来中世纪格斗大逃杀游戏体验
  • 【教程】实测np.fromiter 和 np.array 的性能
  • GCViT实战:使用GCViT实现图像分类任务(一)
  • Django+vue自动化测试平台(29)--测试平台集成playwright录制pytest文件执行
  • LeetCode 算法:杨辉三角 c++
  • Python——类和对象、继承和组合
  • 软考:软件设计师 — 17.程序设计语言与语言处理程序基础
  • IDEA: Html代码格式化
  • 【基础】Three.js中添加操作面板,GUI可视化调试(附案例代码)
  • Java-多线程IO工具类
  • MySQL入门学习-对系统数据库的常用查询
  • midwayjs 框架使用 rabbitmq 消息延迟
  • ES 根据条件删除文档
  • 【Python入门】第5节 数据容器
  • 深入了解以太坊
  • @jsonView过滤属性
  • [deviceone开发]-do_Webview的基本示例
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Apache Zeppelin在Apache Trafodion上的可视化
  • css系列之关于字体的事
  • Golang-长连接-状态推送
  • JWT究竟是什么呢?
  • MySQL-事务管理(基础)
  • React中的“虫洞”——Context
  • 多线程 start 和 run 方法到底有什么区别?
  • 给第三方使用接口的 URL 签名实现
  • 关于springcloud Gateway中的限流
  • 使用common-codec进行md5加密
  • 学习JavaScript数据结构与算法 — 树
  • 以太坊客户端Geth命令参数详解
  • ionic入门之数据绑定显示-1
  • ​渐进式Web应用PWA的未来
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ![CDATA[ ]] 是什么东东
  • #单片机(TB6600驱动42步进电机)
  • (1)(1.9) MSP (version 4.2)
  • (33)STM32——485实验笔记
  • (52)只出现一次的数字III
  • (C)一些题4
  • (NSDate) 时间 (time )比较
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (过滤器)Filter和(监听器)listener
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四)opengl函数加载和错误处理
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)从 Java 代码到 Java 堆
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .Net(C#)常用转换byte转uint32、byte转float等