(尚硅谷)Maven 新版教程 - 锦囊一

目录

  • 参考文献
  • 前言
  • 1、Maven 的工作机制
  • 2、Maven 核心程序解压与配置
    • 2.1 Maven 下载版本(IDEA 配置 Maven 发生错误)
    • 2.2 解压配置 Maven
  • 3、maven 的命令行环境
    • 3.1 坐标和本地仓库的对应关系
    • 3.2 maven 的常用命令
      • 3.2.1 创建 maven 工程命令
      • 3.2.2 Maven 的构建命令
      • 3.2.3 查看当前工程所依赖的 jar 包命令
    • 3.3 创建 Maven 版的 Web 工程(实验四:打包版本错误)
    • 3.4 标签的依赖范围
    • 3.5 依赖的继承
  • 4、IDEA 新建 maven 工程
    • 4.1 创建工程之后的自动导入问题
    • 4.2 maven 配置完成之后报错
    • 4.3 maven 配置一劳永逸的方法
    • 4.4 创建 Web 模块工程
      • 4.4.1 第一种方式(不使用骨架)
      • 4.4.2 第二种方式(使用骨架的方式)
        • 添加 web 模块的两种方法:
        • java 和 resources 包为灰色的原因
      • 4.4.3 war 包打包的时候报错


参考文献

  1. Maven 入门、原理与实战,尚硅谷给出的官方 maven 课件地址,我们现在只要学习第一支锦囊的东西就可以了。
  2. 尚硅谷2022版Maven教程(maven入门+高深,全网无出其右!),尚硅谷,让天下有学不完技术,对应第一支锦囊,看时频 P1-P53 即可。

前言

跟着视频按照老师的教程来操作的时候,由于 IDEA 、JDK 、Maven 版本不一致,会产生一堆意想不到的错误,本文主要是记录自己遇到的报错以及搜索到的可以解决问题的解决方案,以便今后查阅。


1、Maven 的工作机制

(尚硅谷)Maven 新版教程 - 锦囊一_第1张图片
Maven 核心程序:只是负责宏观上的总体调度;
Maven 插件:具体负责干活的;

总结:

  • 我们以后创建工程都是创建 maven 工程,我们写的一些 Maven 程序都是调用 maven 插件的 jar 包来执行的;
  • 我们的工程可以打包成 jar 包主动安装到我们自己定义的 maven 仓库里,我们也可以依赖一些框架的 jar 包,这些 jar 包先从自己的本地仓库找,找不到的话去镜像网站定义的远程仓库进行下载,下载到本地仓库之后就可以进行使用了。

2、Maven 核心程序解压与配置

2.1 Maven 下载版本(IDEA 配置 Maven 发生错误)

参考文献:

  1. IDEA版本与MAVEN版本对应关系,及历史MAVEN版本下载
  2. maven 版本与 idea 版本对应关系
  3. 旧版 maven 的下载地址

这里 IDEA 版本需要和 maven 版本进行对应才可以,不然之后用 idea 配置 maven 的时候会报错。

这里点击 Help - About 之后看到我的 idea 版本为 2012.3.2

(尚硅谷)Maven 新版教程 - 锦囊一_第2张图片

那么根据版本对应信息,maven 版本必须在 idea 发布时间之前的,我们选择 2021.3.2之前的,那选择 3.6.3 版本进行下载
(尚硅谷)Maven 新版教程 - 锦囊一_第3张图片

下载的时候 Windows 系统选择的是 Binary Zip 文件进行下载,如果你想查看源码的话选择 source 文件进行下载。
(尚硅谷)Maven 新版教程 - 锦囊一_第4张图片

2.2 解压配置 Maven

解压到非中文、没有空格的一个地方就可以了。

配置这里可以看尚硅谷的笔记,第一节 - Maven核心程序解压与配置,如果笔记看不懂可以直接看这一节的视频,老师讲的很好,P7 - P13 视频。

  1. 配置 Maven 工程的基础 JDK 版本这一步,改成你自己配置的 JDK 版本,这个配置要放在 标签内部;

<profile>
    <id>jdk-17id>
    <activation>
        <activeByDefault>trueactiveByDefault>
        <jdk>17jdk>
    activation>
    <properties>
        <maven.compiler.source>17maven.compiler.source>
        <maven.compiler.target>17maven.compiler.target>
        <maven.compiler.compilerVersion>17maven.compiler.compilerVersion>
    properties>
profile>
  1. 如果你是 idea 配置 maven 有问题,然后重新安装了低版本的 maven 之后,记得修改环境变量的配置,第二节 配置环境变量。

3、maven 的命令行环境

3.1 坐标和本地仓库的对应关系

  • groupId:一般是公司或组织名称+项目名称,如 com.atguigu.maven
  • artifactId:模块的名称,如 pro01 - maven - java
  • version:模块的版本号,1.0-SNAPSHOT

比如我上面用 gav 坐标唯一定义的 jar 包在本地仓库的位置为:
(尚硅谷)Maven 新版教程 - 锦囊一_第5张图片

3.2 maven 的常用命令

3.2.1 创建 maven 工程命令

  1. 生成一个 maven 工程:mvn archetype:generate
    (尚硅谷)Maven 新版教程 - 锦囊一_第6张图片
    出现 Build SUCCESS 就说明创建成功了。
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: D:\Projects\MavenWorkspace\space01
[INFO] Parameter: package, Value: com.atguigu.maven
[INFO] Parameter: groupId, Value: com.atguigu.maven
[INFO] Parameter: artifactId, Value: pro01-maven
[INFO] Parameter: packageName, Value: com.atguigu.maven
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: D:\Projects\MavenWorkspace\space01\pro01-maven
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.995 s
[INFO] Finished at: 2022-06-01T16:56:31+08:00
[INFO] ------------------------------------------------------------------------
  1. pom.xml 文件中修改自动生成的 junit 测试版本为 4.12 版本;
    (尚硅谷)Maven 新版教程 - 锦囊一_第7张图片

3.2.2 Maven 的构建命令

实验三:执行 Maven 的构建命令

  1. 注意: 运行 Maven 中和构建操作相关的命令时,必须进入到 pom.xml 所在的目录;
  2. 清理操作,删除 target 目录:mvn clean
  3. 主程序编译,将 src/main/java 目录下的 java 文件编译成 class 文件:mvn compile;测试程序编译,将 src/test/java 目录下的 java 文件编译成 class 文件:mvn test-compile;编译完之后放到 target 目录下:

(尚硅谷)Maven 新版教程 - 锦囊一_第8张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第9张图片

  1. 执行测试程序,执行完之后放在 target 目录下:mvn test

(尚硅谷)Maven 新版教程 - 锦囊一_第10张图片

  1. 执行打包程序,执行完之后放到 target 目录下:mvn package

(尚硅谷)Maven 新版教程 - 锦囊一_第11张图片

  1. 执行安装程序,安装的效果是将本地构建过程中生成的 jar 包存入 Maven 本地仓库,你之前定义的坐标这个时候就是你本地仓库的文件加密名称:mvn install

(尚硅谷)Maven 新版教程 - 锦囊一_第12张图片

3.2.3 查看当前工程所依赖的 jar 包命令

  1. 列表形式:mvn dependency:list
  2. 树形结构:mvn dependency:tree
  3. 列表中展示的 jar 包格式包括的信息如下:
    (尚硅谷)Maven 新版教程 - 锦囊一_第13张图片

3.3 创建 Maven 版的 Web 工程(实验四:打包版本错误)

  1. 新建一个 web 工程命令:mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

(尚硅谷)Maven 新版教程 - 锦囊一_第14张图片
2. 修改 pom.xml 文件中的打包方式,其实默认的就是 war 打包方式,但是要确认一下:
(尚硅谷)Maven 新版教程 - 锦囊一_第15张图片
3. 找到依赖信息的网站,https://mvnrepository.com/:
(尚硅谷)Maven 新版教程 - 锦囊一_第16张图片

  1. 实验四步骤 9 将 Web 工程打包为 war 包即进行 mvn package 的时候报错,原因是低版本的 war 包打包插件不能用来打包高版本的 jdk,maven 使用mvn package命令进行打包, 报错:Error injecting constructor, java.lang.ExceptionInInitializerError;

  2. 将你建好的 web 工程粘贴到 tomcat 对应的 webapps 文件夹下面,运行 tomcat 之后,成功运行,为了方便访问,将文件夹名字修改为,那么访问网址为:http://localhost:8080/demo/index.jsp
    (尚硅谷)Maven 新版教程 - 锦囊一_第17张图片
    (尚硅谷)Maven 新版教程 - 锦囊一_第18张图片
    (尚硅谷)Maven 新版教程 - 锦囊一_第19张图片

3.4 标签的依赖范围

我们在设置依赖的时候如下格式,前三个标签是坐标,最后一个要设置依赖的范围,以后我们打包的时候会有选择的打包:
(尚硅谷)Maven 新版教程 - 锦囊一_第20张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第21张图片

依赖的传递性,只有 compile 范围的标签才能传递:
(尚硅谷)Maven 新版教程 - 锦囊一_第22张图片
注意:

  • 我们每次修改了某一文件的 pom.xml 文件之后,需要重新 mvn clean install 之后,也就是要重新安装到本地仓库之后,其他依赖于这个项目的 项目才能获取到当前项目修改的 依赖信息;

3.5 依赖的继承

父工程中定义某一通用依赖:
(尚硅谷)Maven 新版教程 - 锦囊一_第23张图片
在父工程中自定义属性名来配置某一依赖的版本,真正体现一处修改,处处生效。
(尚硅谷)Maven 新版教程 - 锦囊一_第24张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第25张图片
子工程对父工程的继承:
(尚硅谷)Maven 新版教程 - 锦囊一_第26张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第27张图片

4、IDEA 新建 maven 工程

4.1 创建工程之后的自动导入问题

  1. 我们的 File | Settings | Build, Execution, Deployment | Build Tools | Maven | Importing 设置中根本没有老师说的 Import Maven projects automatically,即自动导入 jar 包的功能;
  2. 解决方法:IDEA 2020 新版本自动导入MAVEN依赖的解决方法(快捷键自动导入);
  3. 你可以每次都点击右上角跳出来的小图标,也可以设置一个快捷键一键导包。

4.2 maven 配置完成之后报错

按如下操作修改 maven 对应路径:
(尚硅谷)Maven 新版教程 - 锦囊一_第28张图片
修改完之后本地仓库的位置自动做了修改:
(尚硅谷)Maven 新版教程 - 锦囊一_第29张图片
但是在我们修改 settings 配置文件的时候报错:

(尚硅谷)Maven 新版教程 - 锦囊一_第30张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第31张图片
这里就是由于 maven 版本太高,与 idea 版本不匹配所导致的;直接回到第 2 节按照步骤重新安装对应的 maven 版本。

参考文献:

  1. 2021.3.2版本idea配置maven出现org.codehaus.plexus.component.repository.exception.ComponentLookupException
  2. IDEA版本与MAVEN版本对应关系,及历史MAVEN版本下载

4.3 maven 配置一劳永逸的方法

这里配置的这个只对其他 project 有效,对当前工程无效:

(尚硅谷)Maven 新版教程 - 锦囊一_第32张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第33张图片

下面两步选择 JDK 和 JRE 的时候一定要和你 settings 中配置的基础 JDK 的版本对应上。

(尚硅谷)Maven 新版教程 - 锦囊一_第34张图片

(尚硅谷)Maven 新版教程 - 锦囊一_第35张图片

重新打开一个项目看一下,配置成功了,如果没有的话需要再来一遍应该就可以了。
(尚硅谷)Maven 新版教程 - 锦囊一_第36张图片

4.4 创建 Web 模块工程

参考文献:

  1. IDEA中创建Maven Web项目的两种方法

4.4.1 第一种方式(不使用骨架)

参考链接:

  1. 第四节 创建Web模块工程,这是一种需要自己手动修改 webapp 的路径的方法,有点麻烦还容易出错;

  2. 接下来我们使用挪动的方法:

  3. 我们先创建一个 JAVA 模块,然后在里面添加一个 web 模块,

这里新建 module 不勾选下面的这些模板:

(尚硅谷)Maven 新版教程 - 锦囊一_第37张图片

这边我们自己写模块名字,我们在父工程下面创建子工程的时候,模块的 GroupId 是自动生成的,与父工程的一致

(尚硅谷)Maven 新版教程 - 锦囊一_第38张图片

修改 web 模块的打包方式:
(尚硅谷)Maven 新版教程 - 锦囊一_第39张图片

在当前 module 下面新增一个 web 模块:

(尚硅谷)Maven 新版教程 - 锦囊一_第40张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第41张图片

这个时候工程目录还不对,文件名也不对,我们右键先修改文件夹名称,这个文件夹名称是固定的,一种规定:

(尚硅谷)Maven 新版教程 - 锦囊一_第42张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第43张图片
然后我们将它拖动到 src/main 文件夹下面:

(尚硅谷)Maven 新版教程 - 锦囊一_第44张图片

同时确保这两个文件的目录是正确的,如果是拖动过去的,下面这个文件夹需要修改:

(尚硅谷)Maven 新版教程 - 锦囊一_第45张图片

现在好了,我们配置 tomcat 看看能不能运行,不会配置 tomcat 的看我之前的笔记,不详细讲:
(尚硅谷)Maven 新版教程 - 锦囊一_第46张图片

(尚硅谷)Maven 新版教程 - 锦囊一_第47张图片
网页展示:

(尚硅谷)Maven 新版教程 - 锦囊一_第48张图片

4.4.2 第二种方式(使用骨架的方式)

这里我使用这种方式创建出来的 webapp 模块还不是 web 模块,上面没有蓝色小圆圈,还得自己手动添加,或者 选择 import web.xml 的方式 进行导入。

添加 web 模块的两种方法:

  1. 方法一:

(尚硅谷)Maven 新版教程 - 锦囊一_第49张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第50张图片

将这两个地方的路径修改正确之后应用即可:

(尚硅谷)Maven 新版教程 - 锦囊一_第51张图片

  1. 方法二:

(尚硅谷)Maven 新版教程 - 锦囊一_第52张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第53张图片
(尚硅谷)Maven 新版教程 - 锦囊一_第54张图片
然后修改对应的两处路径:

(尚硅谷)Maven 新版教程 - 锦囊一_第55张图片

java 和 resources 包为灰色的原因

  1. 一种原因是 maven 版本太高,你创建 java 文件夹不能识别;
  2. 另一种原因是你之前创建过同名文件然后删除了之后,但是父模块中的 pom.xml 文件中的聚合还没有删除,又创建了新的有冲突;
  3. 还有一种情况是文件处于被忽略状态,到 File | Settings | Build, Execution, Deployment | Build Tools | Maven | Ignored Files 把文件前面的对勾去掉就可以了。

(尚硅谷)Maven 新版教程 - 锦囊一_第56张图片

参考链接:

  1. IntelliJ IDEA 在main包下面创建Java子包时,Java呈灰色,下面是一种情况以及解决方式。
  2. IDEA中Maven的module是灰色的解决办法

4.4.3 war 包打包的时候报错

参考链接:

  1. idea Cannot access defaults field of Properties的解决方法

这里还是由于打包插件的版本过低,在 pom.xml 文件中定义打包插件的把呢版本即可,参考 3.3 节,好像定义过一次之后,之后自动使用高版本插件了,后来即使我没有定义,也没有报错。

你可能感兴趣的:(maven,maven,intellij-idea,java)