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


参考文献

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

前言

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


1、Maven 的工作机制

在这里插入图片描述
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 版本必须在 idea 发布时间之前的,我们选择 2021.3.2之前的,那选择 3.6.3 版本进行下载
在这里插入图片描述

下载的时候 Windows 系统选择的是 Binary Zip 文件进行下载,如果你想查看源码的话选择 source 文件进行下载。
在这里插入图片描述

2.2 解压配置 Maven

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

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

  1. 配置 Maven 工程的基础 JDK 版本这一步,改成你自己配置的 JDK 版本,这个配置要放在 <profiles> 标签内部;
<!-- 配置 Maven 工程的基础 JDK 版本 -->
<profile>
    <id>jdk-17</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>17</jdk>
    </activation>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.compilerVersion>17</maven.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 包在本地仓库的位置为:
在这里插入图片描述

3.2 maven 的常用命令

3.2.1 创建 maven 工程命令

  1. 生成一个 maven 工程:mvn archetype:generate
    在这里插入图片描述
    出现 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 版本;
    在这里插入图片描述

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 目录下:

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

  1. 列表形式:mvn dependency:list
  2. 树形结构:mvn dependency:tree
  3. 列表中展示的 jar 包格式包括的信息如下:
    在这里插入图片描述

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

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

在这里插入图片描述
2. 修改 pom.xml 文件中的打包方式,其实默认的就是 war 打包方式,但是要确认一下:
在这里插入图片描述
3. 找到依赖信息的网站,https://mvnrepository.com/
在这里插入图片描述

  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
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3.4 标签的依赖范围

我们在设置依赖的时候如下格式,前三个标签是坐标,最后一个要设置依赖的范围,以后我们打包的时候会有选择的打包:
在这里插入图片描述
在这里插入图片描述

依赖的传递性,只有 compile 范围的标签才能传递:
在这里插入图片描述
注意:

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

3.5 依赖的继承

父工程中定义某一通用依赖:
在这里插入图片描述
在父工程中自定义属性名来配置某一依赖的版本,真正体现一处修改,处处生效。
在这里插入图片描述
在这里插入图片描述
子工程对父工程的继承:
在这里插入图片描述
在这里插入图片描述

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 对应路径:
在这里插入图片描述
修改完之后本地仓库的位置自动做了修改:
在这里插入图片描述
但是在我们修改 settings 配置文件的时候报错:

在这里插入图片描述
在这里插入图片描述
这里就是由于 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 有效,对当前工程无效:

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

重新打开一个项目看一下,配置成功了,如果没有的话需要再来一遍应该就可以了。

4.4 创建 Web 模块工程

参考文献:

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

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

参考链接:

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

修改 web 模块的打包方式:
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
然后我们将它拖动到 src/main 文件夹下面:

在这里插入图片描述

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

在这里插入图片描述

现在好了,我们配置 tomcat 看看能不能运行,不会配置 tomcat 的看我之前的笔记,不详细讲:
在这里插入图片描述

在这里插入图片描述
网页展示:

在这里插入图片描述

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

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

添加 web 模块的两种方法:
  1. 方法一:

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

  1. 方法二:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后修改对应的两处路径:

在这里插入图片描述

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

在这里插入图片描述

参考链接:

  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 节,好像定义过一次之后,之后自动使用高版本插件了,后来即使我没有定义,也没有报错。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Maven插件是一种可插拔的工具,可以在Maven构建过程中执行特定的任务。其中,maven-dependency-plugin和maven-surefire-plugin是两个常用的插件。 maven-dependency-plugin插件可以用来管理项目依赖,可以帮助我们列出项目中的依赖关系,复制依赖文件到指定目录,解压依赖文件等。常用的配置包括: - list:列出项目依赖 - copy-dependencies:将所有依赖文件复制到指定目录 - unpack:解压指定的依赖文件 maven-surefire-plugin插件则是用来执行项目的单元测试的。它可以在Maven构建过程中自动执行单元测试,并生成测试报告。常用的配置包括: - includes/excludes:指定要执行的测试类或排除的测试类 - parallel:指定测试是否并行执行 - reportsDirectory:指定测试报告生成的目录 在POM文件中配置这两个插件,可以通过以下方式: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <includes> <include>**/*Test.java</include> </includes> <parallel>methods</parallel> <threadCount>10</threadCount> <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory> </configuration> </plugin> </plugins> </build> ``` 以上是一个简单的POM文件中Maven插件配置maven-dependency-plugin和maven-surefire-plugin的示例,其中maven-dependency-plugin在package阶段执行复制依赖文件的任务,maven-surefire-plugin在test阶段执行单元测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值