maven学习笔记
该篇文章是在B站学习maven所记录的笔记,以及遇到的一些问题在此处记录,以防下次再次遇到
视频地址:黑马
maven基础
maven是一个项目管理工具
依赖管理
依赖管理就是maven对项目中jar包的管理过程。
传统工程我们直接把jar包放置在项目中,而maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。
仓库
仓库种类
本地仓库
远程仓库(私服)
中央仓库
仓库关系
1.当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库里找。
2.默认情况下,如果本地仓库没有jar包,maven工程会自动去中央仓库下载jar包到本地仓库
3.在公司中,如果本地没有对应的jar包,会先从私服下载jar包
4.如果私服没有jar包,可以从中央仓库下载,也可以从本地上传
一键构成
maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。
常用命令
clean;对项目之前的构建信息进行清理
compile;对src中main.java下面的目录进行编译
test;对测试代码进行编译
package;把本地项目直接打包,打在了本地编译目录下
install;把包安装到本地仓库
deploy;把项目直接上传到私服
生命周期
清理生命周期:clean
默认生命周期:compile->test->package->install->deploy
站点声明周期
maven导入jar包
maven工程要导入jar包的坐标,必须要考虑解决jar包冲突
方式一:
第一声明优先原则:哪一jar包的坐标在靠上的位置,这个jar包就是先声明的。先声明的jar包坐标下的依赖包可以优先进入项目中
方式二:
直接依赖,项目中直接导入的jar包就是该项目的直接依赖包
传递依赖,项目中没有直接导入的jar包可以通过项目直接依赖jar包传递到项目中
路劲近者优先原则:直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的依赖包
方式三:(推荐使用)
当我们要排除某个jar包下依赖包,在配置exclusions标签的时候,内部可以不写版本号
因此此时依赖包使用的版本和默认和本jar包一样
用例演示:第二天_04
maven学习遇到的问题
1.resources出现warning或出现不再支持源选项5,请使用6或更高版本报错
前者warning信息:
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven_web01 ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory D:\maven\IdeaProjects\maven_web01\src\main\resources
后者报错信息:
解决方法:在pom.xml中添加一下部分
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
2.运行tomcat:run报错
错误信息:
选取一段
严重: Compilation error
org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
at org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader.<init>(ClassFileReader.java:342)
at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:206)
at org.apache.jasper.compiler.JDTCompiler$1.findType(JDTCompiler.java:163)
at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:96)
at org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:49)
at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:97)
at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:167)
at org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2187)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:974)
at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1164)
at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:366)
at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:623)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:429)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:349)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.base/java.lang.Thread.run(Thread.java:834)
http://localhost:8080/maven_web01打开后显示信息:
解决方法:添加tomcat7
在pom.xml中添加
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
</configuration>
</plugin>
</plugins>
</build>
并且在
中运行的不是tomcat:run而是tomcat7:run
这样运行以后没有报错,网址http://localhost:8888/maven_web01/显示如下(注意此时的端口号改了,因为上面依赖包中的端口号是8888)
3.除此之外再在上述plugins中添加org.apache.maven.plugins
在视频中这个是和上述tomcat7一起添加的,但是出现了一个警告,因此在此处记录一下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
此时运行和2中的结果一直,但是出现了一个警告,内容如下:
Some problems were encountered while building the effective model for ZYJ:maven_web01:war:1.0-SNAPSHOT
'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 49, column 21
It is highly recommended to fix these problems because they threaten the stability of your build.
For this reason, future Maven versions might no longer support building such malformed projects.
截图是这样的:
解决方法:在上述中添加版本号,如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version><!--此处添加版本号,1.8对应的是3.1-->
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
4.为了避免每次都要复制粘贴这么多,将其进行代码模板添加
打开设置(setting)->编译器(editor)->代码模板(Live Template)
首先点击1处,点击2.Template Group,取个新名字,这里是custom
再选择我们添加的custom目录,再点击1处,点击1.Live Template就会出现下面的部分,在缩写里取缩写的名字,再将上述文本粘贴到模板文本处
最后会出现下面的警告,点击Define,选择XML(X)
最后点击应用即可
这么做之后,在xml文件中输入jdk1.8按回车直接会出现对应的模板文本,就不用每次都复制粘贴了
具体的原理和过程也可以参考视频