尚硅谷的Maven课程,自己学习时记录的笔记
b站视频:Maven零基础入门教程

文章目录

  • 一、概述
    • (一) 为什么需要Maven
      • 1. 目前的技术
      • 2. 开发中存在的问题
    • (二) 什么是Maven?
      • 1. Maven 简介
      • 2. 部署 Maven 核心程序
  • 二、Maven 核心概念
    • (一) 约定的目录结构
      • 1. 创建约定的目录结构
      • 2. 为什么要遵守约定的目录结构?
    • (二) 常用命令和联网问题
      • 1. 常用 Maven 命令
      • 2. 关于联网问题
    • (三) POM
    • (四) 坐标
      • 1. 几何中的坐标
      • 2. Maven 的坐标
      • 3. 对应关系
    • (五) 仓库
      • 1. 分类
      • 2. 仓库中保存的内容
    • (六) 生命周期
      • 1. 概述
      • 2. Clean 生命周期
      • 3. Site 生命周期
      • 4. Default 生命周期
      • 5. 生命周期与自动化构建
    • (七) 插件和目标
    • (八) 依赖
      • 1. 依赖的目的
      • 2. 依赖的范围
      • 3. 依赖的传递性
      • 4. 依赖的排除
      • 5. 依赖的原则
      • 6. 统一管理所依赖 jar 包
    • (九) 继承
      • 1. 概述
      • 2. 操作步骤
    • (十) 聚合
  • 三、IDEA中进行Maven操作
    • (一) 安装Maven核心程序
      • 1. 解压
      • 2. 复制路径
      • 3. 配置环境变量
      • 4. 测试
    • (二) 配置本地仓库和阿里云镜像
      • 1. 配置本地仓库
      • 2. 配置阿里云镜像
      • 3. 配置默认的JDK版本
    • (三) 在 IDEA 中使用 Maven
      • 1. 配置 Maven
      • 2. 创建 Maven 项目
      • 3. 导入 Maven 项目

一、概述

(一) 为什么需要Maven

1. 目前的技术

Maven 并不是直接用来辅助编码的,它战斗的岗位并不是以上各层。所 以我们有必要通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足。


2. 开发中存在的问题

2.1 一个项目就是一个工程

  • 如果项目非常庞大,就不适合继续使用 package 来划分模块。最好是每一个模块对应一个工程,利于分工协作。
  • 借助 Maven 就可以将一个项目拆分成多个工程。

2.2 项目需要的jar包必须手动“复制”、“粘贴”到WEB-INF/lib目录下

  • 同样的 jar 包文件重复出现在不同的项目中,一方面浪费存储空间,另一方面也让工程显得很臃肿。
  • 借助 Maven ,可以将 jar 包仅仅保存在“仓库”中,有需要使用的工程“引用”这个文件接口,并不需要真的把 jar 包复制过来。

2.3 jar包需要别人替我们准备好,或到官网下载

  • 不同技术的官网提供 jar 包下载的形式是五花八门的。有些技术官网就是通过 Maven 或 SVN 等专门的工具来提供下载的。如果是以非正规的形式下载 jar 包,那么其中的内容很可能也是不规范的。
  • 借助于 Maven 可以以一种规范的方式下载 jar 包。因为所有知名框架或第三方工具的 jar 包以及按照统一的规范存放在了 Maven 的中央仓库中。以规范的方式下载的 jar 包,内容也是可靠的。
  • Tips:“统一的规范”不仅是对IT开发领域非常重要,对于整个人类社会都是非常重要的。

2.4 一个jar包依赖其他jar包需要自己手动加入到项目中

  • jar 包往往不是孤立存在的,很多 jar 包都需要在其他 jar 包的支持下才能够正常工作,我们称之为 jar 包之间的依赖关系。最典型的例子是: commons-fileupload-1.3.jar 依赖于 commons-io-2.0.1.jar ,如果没有 IO 包,FileUpload 包就不能正常工作。
  • Maven 会自动将被依赖的 jar 包导入进来。

(二) 什么是Maven?

1. Maven 简介

Maven 是 Apache 软件基金会组织维护的一款自动化 构建 工具,专注服务于 Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。

构建概念

构建并不是创建,创建一个工程并不等于构建一个项目。

以“Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片”等资源作为“原材料”,去“生产”一个可以运行的项目的过程。

编译、部署、搭建

1.1 编译

以Java源文件[User.java] --> 编译 --> Class字节码文件[User.class] --> 交给JVM去执行

1.2 部署

(1)一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果”。

  • 生的鸡 --> 处理 --> 熟的鸡
  • 动态Web工程 --> 编译、部署 --> 编译结果

在开发过程中,所有的路径或配置文件中配置的类路径等都是以编译结果的目录结构为标准的。

(2)Tips:运行时环境

其实是一组 jar 包的引用,并没有把 jar 包本身复制到工程中,所以并不是目录。

(3)构建过程中的各个环节

  • ① 清理:删除以前的编译结果(旧的class字节码文件),为重新编译做好准备。
  • ② 编译:将 Java 源程序编译为class字节码文件。
  • ③ 测试:自动调用 JUnit 程序,针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  • ④ 报告:在每一次测试后以标准的格式记录和展示测试结果。
  • ⑤ 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
  • ⑥ 安装:在 Maven 环境下特指将打包的结果—— jar 包或 war 包安装到“仓库”中的指定位置。
  • ⑦ 部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

(4)自动化构建

将“编译、打包、部署、测试”,这些程式化的工作交给机器。

2. 部署 Maven 核心程序

参考:尚硅谷_Maven操作步骤截图.pdf + 视频p7
IDEA版本见笔记第三部分


二、Maven 核心概念

①POM ②约定的目录结构 ③坐标 ④依赖管理 ⑤仓库管理 ⑥生命周期 ⑦插件和目标 ⑧继承 ⑨聚合

(一) 约定的目录结构

1. 创建约定的目录结构

  • 创建第一个 Maven 工程,工程名:Hello。参考:Maven操作指南.txt
  • [1] 根目录:工程名;[2] src目录:源码;[3] pom.xml文件:Maven 工程的核心配置;[4] main目录:存放主程序;[5] test目录:存放测试程序;[6] java目录:存放Java源文件;[7] resourse目录:存放框架或其他工具的配置文件

2. 为什么要遵守约定的目录结构?

  • Maven 要负责我们这个项目的自动化构建,以编译为例,Maven 要想自动进行编译,那么它必须知道 Java 源文件保存在哪里。

  • 如果我们自己自定义的东西想让框架或工具知道,有两种办法:

    • 以配置的方法明确告诉框架

      <param-value>Classpath:spring-context.xml</param-value>
      
    • 遵守框架内部以及存在的约定

      • log4j.propertieslog4j.xml 形式
  • 现在 JavaEE 开发领域普遍认同一个观点:约定 > 配置 > 编码。意思就是能用配置解决的问题就不编码, 能基于约定的就不进行配置。而 Maven 正是因为指定了特定文件保存的目录才能够对我们的 Java 工程进行自动化构建。


(二) 常用命令和联网问题

注意:执行与构建过程相关的 Maven 命令,必须进入 pom.xml 所在的目录。

  • 与构建过程相关:编译、测试、打包、…

1. 常用 Maven 命令

在 cmd 中输入命令

(1)mvn clean:清理

(2)mvn compile:编译主程序

(3)mvn test-compile:编译测试程序

(4)mvn test:执行测试

(5)mvn package:打包

(6)mvn install:安装

(7)mvn site:生成站点

2. 关于联网问题

(1) Maven 的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在 Maven 的核心程序中。

(2)当我们执行的 Maven 命令需要用到某些插件时, Maven 核心程序会首先到本地仓库中查找。

(3)本地仓库的默认位置:[系统中当前用户的家目录].m2\repository

C:\Users\[登录当前系统的用户名]\.m2\repository

(4) Maven 核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。如果此时无法连接外网,则构建失败。

(5)修改默认本地仓库的位置可以让 Maven 核心程序到我们事先准备好的目录下查找插件。

  • 找到 Maven 解压目录

    D:\develop\Maven\apache-maven-3.2.2\conf\settings.xml
    
  • settings.xml 文件中找到 localRepository 标签,并将标签从注释中取出

  • 将标签体内容修改为以及准备和的Maven仓库目录:

    <localRepository>/path/to/local/repo</localRepository>
    
    • 改成:(记得先把 RepMaven.zip 压缩包解压,并放到 RepMaven 文件夹中)
    <localRepository>D:\develop\Maven\RepMaven</localRepository>
    

(三) POM

  • Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。(DOM Document Object Model:文档对象模型)
  • pom.xml 对于 Maven 工程是核心配置文件,与狗i教案过程相关的一起设置都在这个文件中进行配置。重要程度相当于 web.xml 对于动态Web工程。

(四) 坐标

1. 几何中的坐标

(1)在一个平面中使用 x、y 两个向量可以唯一的确定平面中的一个点。

(2)在空间中使用 x、y、z 三个向量可以唯一的确定空间中的一个点。

2. Maven 的坐标

使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程:

(1) groupId:公司或组织的域名倒序 + 当前项目名称

<groupId>com.atguigu.maven</groupId>

(2) artifactId:当前项目的模块名称

<artifactId>Hello</artifactId>

(3) version:当前模块的版本

<version>1.0.0</version>

3. 对应关系

Maven工程的坐标与仓库中路径的对应关系:

  • 举例:在RepMaven文件夹中查找资源
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>
  • 路径为:
org.springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

(五) 仓库

1. 分类

(1)本地仓库:为当前本机电脑上的所有 Maven 工程服务。

(2)远程仓库:

  • ① 私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。

  • ② 中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
  • ③ 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

2. 仓库中保存的内容

(1)Maven 自身所需要的插件

(2)我们自己开发的 Maven 工程

(3)第三方框架或工具的 jar

  • 不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。

(六) 生命周期

1. 概述

(1)各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。

(2) Maven 的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。

  • Maven 有三套相互独立的生命周期,分别是:

    • ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    • ②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
    • ③Site Lifecycle 生成项目报告,站点,发布站点。
  • 它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以 直接运行 mvn clean install site 运行所有这三套生命周期。
  • 每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比 如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。

2. Clean 生命周期

Clean 生命周期一共包含了三个阶段:

(1)pre-clean 执行一些需要在 clean 之前完成的工作。

(2)clean 移除所有上一次构建生成的文件。

(3)post-clean 执行一些需要在 clean 之后立刻完成的工作.

3. Site 生命周期

Clean 生命周期一共包含了四个阶段:

(1)pre-site 执行一些需要在生成站点文档之前完成的工作。

(2)site 生成项目的站点文档。

(3)post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备。

(4)site-deploy 将生成的站点文档部署到特定的服务器上。

  • 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大 的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。

4. Default 生命周期

Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里, 只解释一些比较重要和常用的阶段:

  • validate
  • process-resources:复制并处理资源文件,至目标目录,准备打包。
  • compile:编译项目的源代码。
  • process-test-resources:复制并处理资源文件,至目标测试目录。
  • test-compile:编译测试源代码。
  • process-test-classes
  • test:使用合适的单元测试框架运行测试,这些测试代码不会被打包或部署。
  • prepare-package
  • package:接受编译好的代码,打包成可发布的格式,如 JAR。
  • install:将包安装至本地仓库,以让其它项目依赖。
  • deploy:将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

5. 生命周期与自动化构建

  • 运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行 mvn install 的时候,代码会被编译,测试,打包。这就是 Maven 为什么能够自动执行构建过程的各个环节的原因。
  • 此外,Maven 的插件机制是完全依赖 Maven 的生命周期的,因此理解生命周期至关重要。
  • 例如执行 mvn package 命令,它前面的所有阶段都会被运行,如图:


(七) 插件和目标

(1)Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。

(2)每个插件都能实现多个功能,每个功能就是一个插件目标。

(3)Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。

  • 例如:compile 就是插件 maven-compiler-plugin 的一个目标;testCompile 是插件 maven-clean-plugin 的一个目标。
生命周期阶段 插件目标 插件
compile compile maven-compiler-plugin
test-compile testCompile maven-compiler-plugin
  • 可以将目标看作“调用插件功能的命令”。

(八) 依赖

  • 创建第二个 Maven 工程,工程名:HelloFriend。参考:Maven操作指南.txt

1. 依赖的目的

当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目中以依赖的方式引入一个我们需要的 jar 包呢? 答案非常简单,就是使用 dependency 标签指定被依赖 jar 包的坐标就可以了。

  • 我们自定义的两个工程间的依赖关系:第二个 Maven 工程 HelloFriend ,依赖第一个 Maven 工程 Hello 。在 HelloFriend 的 pom.xml 中配置如下:
<dependency><groupId>com.atguigu.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope>
</dependency>
  • Maven 解析依赖信息时会到本地仓库中查找被依赖的 jar 包。对于我们自己开发的 Maven 工程,要先使用 mvn install 命令安装后才可以进入仓库。

2. 依赖的范围

上面的依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范围有几个可选值,我们用得到的是:compile、test、provided 三个。

(1)从项目结构角度理解 compile 和 test 的区别:

  • 对于第二个 Maven 工程 HelloFriend 来说,第一个 Maven 工程 Hello 既要被主程序「main」依赖,又要被测试程序「test」依赖,所以 compile 范围依赖对主程序和测试程序都应该有效,且参与打包;
  • 对于第二个 Maven 工程 HelloFriend 来说,JUnit 单元测试只被测试程序「test」依赖,主程序「main」不需要,所以 test 范围依赖仅对测试程序有效,且不参与打包。

(2)从开发和运行这两个不同阶段理解 compile 和 provided 的区别:

  • compile范围的依赖:

  • provided范围的依赖:

在开发阶段需要依赖于servet-api.jar包,但在Tomcat上运行时,会由Servlet容器提供依赖,这时应该采用Tomcat提供的 jar 包依赖。因此provide范围依赖仅对开发过程有效,且不参与。

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包:不参与
  • 是否参与部署:不参与

(3)有效性总结

compile test provided
主程序 ×
测试程序
参与部署 × ×

3. 依赖的传递性

  • 创建第三个 Maven 工程,工程名:MakeFriends。参考:Maven操作指南.txt

(1)举例:在Hello工程里添加spring-core依赖后,HelloFriend工程 和 MakeFriend工程 中都自动添加了spring-core依赖。

  • Hello工程里添加spring-core依赖:

  • HelloFriend工程 和 MakeFriend工程 自动添加:

  • 依赖的层次结构:(直接和间接依赖)

(2)好处:可以传递的依赖不必在每个模块工程中都重复声明,在“最下面”的工程中依赖一次即可。

(3)注意:非compile范围的依赖不能传递。所以在各个工程模块中,如果有需要就得重复声明依赖。

4. 依赖的排除

如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时候将 B 排除。

(1)举例需要设置依赖排除的场合:

(2)配置方式:

<dependency><groupId>com.atguigu.maven</groupId><artifactId>HelloFriend</artifactId><version>0.0.1-SNAPSHOT</version><type>jar</type><scope>compile</scope><exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions>
</dependency>

(3)排除后的效果:

5. 依赖的原则

  • 依赖的原则:解决 jar 包冲突

(1)路径最短者优先

(2)路径相同时先声明者优先

  • 这里“声明”的先后顺序指的是 dependency 标签配置的先后顺序。

6. 统一管理所依赖 jar 包

对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提取出来。

(1)在properties标签内使用自定义标签统一声明版本号

  • 其中 atguigu.spring.version 部分是自定义标签
<properties><atguigu.spring.version>4.0.0.RELEASE</atguigu.spring.version>
</properties>

(2)在需要同一版本的位置,使用${自定义标签名}引用前面声明的版本号

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${atguigu.spring.version}</version></dependency>...
</dependencies>

(3)其他用法

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

(九) 继承

1. 概述

1.1 现状

(1)Hello依赖的JUnit版本:4.0

(2)HelloFriend依赖的JUnit版本:4.0

(3)MakeFriends依赖的JUnit版本:4.9

  • 由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。

1.2 需求

统一各个模块工程对JUnit依赖的版本。

1.3 解决思路

将JUnit依赖统一提取到“父”工程中,在子工程中声明JUnit依赖时不指定版本,以父工程中统一设定的为准。同时也便于修改。

2. 操作步骤

(1)创建一个 Maven 工程作为父工程 Parent 。注意:打包的方式为pom。

<groupId>com.atguigu.maven</groupId>
<artifactId>Parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

(2)在子工程中声明对父工程的引用。

<parent><!-- 父工程坐标 --><groupId>com.atguigu.maven</groupId><artifactId>Parent</artifactId><version>0.0.1-SNAPSHOT</version><!-- 指定从当前子工程的pom.xml文件出发,查找父工程的pom.xml的相对路径 --><relativePath>../Parent/pom.xml</relativePath>
</parent>

(3)将子工程的坐标中与父工程坐标中重复的内容(黄线部分)删除。

  • 警告:GroupId is duplicate of parent groudId

(4)在父工程中统一JUnit的依赖。

  • 在父工程 Parent 项目中的用 dependencyManagement 标签配置依赖的管理。
<dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency></dependencies>
</dependencyManagement>

(5)在子工程中删除JUnit依赖的版本号部分。

注意

配置继承后,执行安装命令时要先安装父工程,非则子工程会安装失败。


(十) 聚合

10.1 为什么要使用聚合?

将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。

10.2 配置方式

  • 新建一个“总的聚合工程”,使用 modules/module 标签组合,配置各个参与聚合的模块,指定模块工程的相对路径即可。

  • 顺序不影响,但最好按照依赖的关系顺序写。

<!-- 配置聚合 -->
<modules><!-- 指定各个子工程的相对路径 --><module>../Hello</module><module>../HelloFriend</module><module>../MakeFriends</module>
</modules>

10.3 使用方式

在聚合工程的pom.xml上点右键 --> run as --> maven install。


Maven 酷站

我们可以到 http://mvnrepository.com/搜索需要的 jar 包的依赖信息。


三、IDEA中进行Maven操作

(一) 安装Maven核心程序

1. 解压

(1)官网下载压缩包,下载地址:http://maven.apache.org/ (此处直接从资料里拿的)

(2)命令行输入: echo %JAVA_HOME% ,检查 JAVA_HOME 环境变量。Maven 是使用 Java 开发的,所以必须知道当前系统环境中 JDK 的安装目录。

(3)把 apache-maven-3.6.3.zip 解压到一个 非中文无空格 的目录下。

2. 复制路径

复制bin的上一级路径:D:\develop\Maven\apache-maven-3.6.3

3. 配置环境变量

(1)右键此电脑 --> 属性 --> 高级系统设置 --> 环境变量 --> 新建(系统变量or用户变量)–> MAVEN_HOME --> 把复制的路径填进去(D:\develop\Maven\apache-maven-3.6.3)。

(2)接上环境变量 --> path --> 新建 --> %MAVEN_HOME%\bin --> 确定。

(3)配置环境变量的好处是:当我们想更换其他版本的 maven 核心程序时,只需要更改 MAVEN_HOME 环境变量的变量值即可。

4. 测试

win+r --> 输入cmd --> 命令行输入mvn -v --> 出现相关信息即配置成功。


(二) 配置本地仓库和阿里云镜像

1. 配置本地仓库

(1)Maven 的核心程序并不包含具体功能,仅负责宏观调度。具体功能由插件来完成。Maven 核心程序会到本地仓库中查找插件。如果本地仓库中没有就会从远程中央仓库下载。此时如果不能上网则无法执行 Maven 的具体功能。为了解决这个问题,我们可以将 Maven 的本地仓库指向一个在联网情况下下载好的目录。

  • 在 D:\develop\Maven\ 下新建文件夹:LocalRepository,用做本地仓库存放下载的 jar

(2)Maven 默认的本地仓库:~.m2\repository 目录。 Tips:~表示当前用户的家目录。

(3)找到 Maven 的核心配置文件 settings.xml 文件:

D:\develop\Maven\apache-maven-3.6.3\conf\settings.xml

(4)设置方式:(本地仓库的路径)

<localRepository>D:\develop\Maven\LocalRepository</localRepository>

2. 配置阿里云镜像

为了下载 jar 包方便,在 Maven 的核心配置文件 settings.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>

3. 配置默认的JDK版本

在 settings.xml 中将默认创建修改为JDK1.8,以后创建的 Maven 工程默认运行环境就为JDK1.8,无需再手动修改。

(1)找到 Maven 的核心配置文件 settings.xml 文件:

D:\develop\Maven\apache-maven-3.6.3\conf\settings.xml

(2)在 <profile></profiles> 标签中配置为1.8版本:

<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>

(三) 在 IDEA 中使用 Maven

1. 配置 Maven

1.1 配置自己安装的 Maven

  • 新建一个空项目名为:Maven。

(1)选择自己下载好的 Maven 版本。

(2)修改settings.xml的路径和本地仓库的路径:

(3)勾选自动导入需要的 jar 包:

1.2 配置自带的 Maven

同理可修改IDEA自带的 Maven 的配置,方便统一管理。

在Idea 自带的 Maven 在 Idea 的安装目录的 plugins 目录中,更改 settings.xml 中的配置:(D:\develop\IntelliJ IDEA 2019.3.3\plugins\maven\lib\maven3\conf\ settings.xml)

(1)本地仓库:

<localRepository>D:\develop\Maven\LocalRepository</localRepository>

(2)阿里云镜像:

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

(3)默认JDK版本:

<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>

(4)结果:


2. 创建 Maven 项目

2.1 创建 Java 工程

(1)点击 File→New→Module…(如果之前没有 Project 选 Project)→Maven。

(2)配置要继承的模块(如果直接创建的是 Project 不存在这一项)、 坐标(GAV)、路径。

(3)点击 Finish 即可创建成功。

(4)配置 Maven 的核心配置文件 pom.xml。

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion><groupId>cn.irene.maven</groupId><artifactId>Hello</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies></project>

(5)编写主代码:在 src/main/java 目录下创建包并创建 Hello.java 文件

package cn.irene.maven;public class Hello {public String sayHello(String name) {return "Hello" + name + "!";}
}

(6)编写测试代码:在/src/test/java 目录下创建包并创建 HelloTest.java 文件

package cn.irene.maven;import org.junit.Test;public class HelloTest {@Testpublic void testHello(){Hello hello = new Hello();String maven = hello.sayHello("Maven");System.out.println(maven);}
}

(7)使用 Maven 的方式运行 Maven 工程

  • 双击要运行的命令名称即可。

2.2 创建 Web 工程(了解)

(1)创建简单的 Maven 工程,打包方式为 war 包

<groupId>cn.irene.maven</groupId>
<artifactId>MavenWeb</artifactId>
<!-- Web工程的打包方式为war -->
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>

(2)点击 Project Structure

(3)选择对应的 Module,设置 Web 目录

(4)弹出提示框,选择版本后点击 OK

(5)生成 web.xml 文件

(6)设置存放 web 页面文件的目录后点击 OK

(7)点击 OK

(8)发现项目中多了一个 web 目录,而且目录上有一个蓝点

(9)在 web 目录下创建 index.jsp 页面

(10)部署到 Tomcat 上运行


3. 导入 Maven 项目

(1)点击 Project Structure

(2)点击 Modules→加号→Import Module

(3)找到项目所在的位置

(4)选择 Import module from external model(从外部模型导入模块)→Maven →Finish

Maven快速入门(IDEA版) - 尚硅谷相关推荐

  1. Opencv快速入门(C++版),新手向

    Opencv快速入门(C++版) 前言 1.图像的读取与显示 所使用的API接口: 代码演示: 2.图像色彩空间转换 所使用的API接口: 代码演示: 3.图像对象的创建与赋值 所使用的API接口: ...

  2. promise的状态以及api介绍_Promise从入门到自定义 | 尚硅谷Promise新版视频发布!

    尚硅谷发布全新升级版前端课程,推出"5+100+3"人才培养新模式,5.5个月系统学习+100课时进阶课程+3年谷粒学院VIP课程,为技术成长持续赋能,打造前端架构师!预知详情,猛 ...

  3. 2019版尚硅谷Java入门视频项目三中的个人出现的报错Cannot resolve symbol ‘PC‘解决方法 ——idea工具

    一.问题描述 Cannot resolve symbol 'PC' 二.问题解决 文章的开头我根据个人报错情况先给出解决报错的方法!!!加入如下代码: import com.PC; 这个是要根据你存放 ...

  4. IDEA快速入门(Mac版)

    [持续更新]一篇今年年头的老文章顺道发布了,大家有任何问题可以留言沟通.当时刚刚加入团团,愿大家有机会还是购买一台MAC,确实能给大家的效率赋能,虽然在一开始会有一些艰难!⛽️ 望借着换工作的东风,好 ...

  5. Spring Boot 2 入门笔记(尚硅谷)

    目录 一.基础入门 1.Spring与Spring boot 1)Spring 生态圈 2)Spring boot 3)Spring boot2 4)SpringBoot优点: 5)缺点 2.时代背景 ...

  6. Maven入门指南① :Maven 快速入门及简单使用

    原文链接:http://www.cnblogs.com/luotaoyeah/archive/2014/06/02/3764533.html 开发环境 MyEclipse 2014 JDK 1.8 M ...

  7. python快速入门期末版_史上最全Python快速入门教程,满满都是干货

    原博文 2020-10-11 17:07 − Python是面向对象,高级语言,解释,动态和多用途编程语言.Python易于学习,而且功能强大,功能多样的脚本语言使其对应用程序开发具有吸引力.Pyth ...

  8. 使用maven快速入门

    Maven 基础知识 官网: 传送门 Maven 项目结构 $ MavenProject |-- pom.xml |-- src | |-- main | | `-- java | | `-- res ...

  9. HTMLCSS学习笔记 纯知识点版 (尚硅谷2019李立超版)

    此版为纯知识点无练习笔记版本 目录 1. HTML基础 1.1 网页的结构 1.2 HTML中的"实体" 1.3 meta 标签 1.4 语义化标签 1.7 列表 1.8 超链接 ...

最新文章

  1. Android OkHttp之 offline cache
  2. python3运行报错:TypeError: Object of type ‘type‘ is not JSON serializable解决方法(详细)
  3. 【Android 安装包优化】WebP 应用 ( 4.0 以下兼容 WebP | Android Studio 中使用 libwebp.so 库向下兼容版本 | libwebp 库测试可用性 )
  4. Java中的nextInt()和next()与nextLine()区别详解
  5. win10html中文乱码,Win10预览版10125中文语言包安装及乱码解决方法
  6. mysql的执行效率_数据库执行效率的对比测试
  7. 外贸常用术语_外贸中常用的会计术语及付款方式术语 | 会计英语
  8. 【Python】Sklearn加载load_digits样本数据集
  9. 【转】oracle 和 ' 特殊字符处理 ( like 'GAC/_%' escape ''; 这里面的 / 居然将 转义了 为什么?)...
  10. mysql用any查询_mysql 5.6有ANY_VALUE功能吗?
  11. android-swipelistview的开源项目的配置
  12. ubuntu12.04 64位系统配置jdk1.6和jdk-6u20-linux-i586.bin下载地址
  13. 【Java爬虫】爬取淘宝买家秀
  14. cron表达式每隔1小时一次_cron 每隔1小时50分钟_cron每小时执行一次
  15. 第六章 平均绝对误差(MAE)与均方根误差(RMSE)
  16. Ghost XP封装教程超详细版
  17. 【批处理DOS-CMD命令-汇总和小结】-上网和网络通信相关命令-用户账户管理-文件(夹)共享(net)
  18. opendrive网盘 一个能免费直接外链的网盘
  19. 基于LBP纹理特征计算GLCM的纹理特征统计量+SVM/RF识别纹理图片
  20. MATLAB图像模糊复原

热门文章

  1. php_bz2作用,Linux中bzip2命令起什么作用呢?
  2. ArangoDB 中集成的 RocksDB 存储引擎常见问题解答[已翻译]
  3. 来自 Vue 官方团队的 57 个技术分享
  4. 区块链DeFi常见词汇总结(1)
  5. vue.js写一个DOTA2卡尔练习小游戏
  6. 一篇10W+的文章能赚多少钱?
  7. java中cos计算公式求cos溢出_用台劳公式计算cos x的值
  8. 多方面比较Salesforce与Microsoft Dynamics 365
  9. 解决:PHP 阿里云OSS访问图片地址默认下载而不是在线预览
  10. 第十六届计算机表演赛,第十六届全国中小学学生计算机表演赛邢台赛区评选结果...