跟着视频按照老师的教程来操作的时候,由于 IDEA 、JDK 、Maven 版本不一致,会产生一堆意想不到的错误,本文主要是记录自己遇到的报错以及搜索到的可以解决问题的解决方案,以便今后查阅。
Maven 核心程序:只是负责宏观上的总体调度;
Maven 插件:具体负责干活的;
总结:
参考文献:
这里 IDEA 版本需要和 maven 版本进行对应才可以,不然之后用 idea 配置 maven 的时候会报错。
这里点击 Help - About 之后看到我的 idea 版本为 2012.3.2
那么根据版本对应信息,maven 版本必须在 idea 发布时间之前的,我们选择 2021.3.2之前的,那选择 3.6.3 版本进行下载
下载的时候 Windows 系统选择的是 Binary Zip 文件进行下载,如果你想查看源码的话选择 source 文件进行下载。
解压到非中文、没有空格的一个地方就可以了。
配置这里可以看尚硅谷的笔记,第一节 - Maven核心程序解压与配置,如果笔记看不懂可以直接看这一节的视频,老师讲的很好,P7 - P13 视频。
标签内部;
<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>
比如我上面用 gav 坐标唯一定义的 jar 包在本地仓库的位置为:
[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] ------------------------------------------------------------------------
实验三:执行 Maven 的构建命令
mvn clean
;mvn compile
;测试程序编译,将 src/test/java 目录下的 java 文件编译成 class 文件:mvn test-compile
;编译完之后放到 target 目录下:mvn test
;mvn package
;mvn install
;mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4
,
2. 修改 pom.xml 文件中的打包方式,其实默认的就是 war 打包方式,但是要确认一下:
3. 找到依赖信息的网站,https://mvnrepository.com/:
实验四步骤 9 将 Web 工程打包为 war 包即进行 mvn package
的时候报错,原因是低版本的 war 包打包插件不能用来打包高版本的 jdk,maven 使用mvn package命令进行打包, 报错:Error injecting constructor, java.lang.ExceptionInInitializerError;
将你建好的 web 工程粘贴到 tomcat 对应的 webapps 文件夹下面,运行 tomcat 之后,成功运行,为了方便访问,将文件夹名字修改为,那么访问网址为:http://localhost:8080/demo/index.jsp
。
我们在设置依赖的时候如下格式,前三个标签是坐标,最后一个要设置依赖的范围,以后我们打包的时候会有选择的打包:
依赖的传递性,只有 compile 范围的标签才能传递:
注意:
mvn clean install
之后,也就是要重新安装到本地仓库之后,其他依赖于这个项目的 项目才能获取到当前项目修改的 依赖信息;父工程中定义某一通用依赖:
在父工程中自定义属性名来配置某一依赖的版本,真正体现一处修改,处处生效。
子工程对父工程的继承:
File | Settings | Build, Execution, Deployment | Build Tools | Maven | Importing
设置中根本没有老师说的 Import Maven projects automatically
,即自动导入 jar 包的功能;按如下操作修改 maven 对应路径:
修改完之后本地仓库的位置自动做了修改:
但是在我们修改 settings 配置文件的时候报错:
这里就是由于 maven 版本太高,与 idea 版本不匹配所导致的;直接回到第 2 节按照步骤重新安装对应的 maven 版本。
参考文献:
这里配置的这个只对其他 project 有效,对当前工程无效:
下面两步选择 JDK 和 JRE 的时候一定要和你 settings 中配置的基础 JDK 的版本对应上。
重新打开一个项目看一下,配置成功了,如果没有的话需要再来一遍应该就可以了。
参考文献:
参考链接:
第四节 创建Web模块工程,这是一种需要自己手动修改 webapp 的路径的方法,有点麻烦还容易出错;
接下来我们使用挪动的方法:
我们先创建一个 JAVA 模块,然后在里面添加一个 web 模块,
这里新建 module 不勾选下面的这些模板:
这边我们自己写模块名字,我们在父工程下面创建子工程的时候,模块的 GroupId 是自动生成的,与父工程的一致
在当前 module 下面新增一个 web 模块:
这个时候工程目录还不对,文件名也不对,我们右键先修改文件夹名称,这个文件夹名称是固定的,一种规定:
同时确保这两个文件的目录是正确的,如果是拖动过去的,下面这个文件夹需要修改:
现在好了,我们配置 tomcat 看看能不能运行,不会配置 tomcat 的看我之前的笔记,不详细讲:
这里我使用这种方式创建出来的 webapp 模块还不是 web 模块,上面没有蓝色小圆圈,还得自己手动添加,或者 选择 import web.xml 的方式 进行导入。
将这两个地方的路径修改正确之后应用即可:
File | Settings | Build, Execution, Deployment | Build Tools | Maven | Ignored Files
把文件前面的对勾去掉就可以了。参考链接:
参考链接:
这里还是由于打包插件的版本过低,在 pom.xml 文件中定义打包插件的把呢版本即可,参考 3.3 节,好像定义过一次之后,之后自动使用高版本插件了,后来即使我没有定义,也没有报错。