Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
配置Maven环境直接查。
得会在IDEA创建Maven的java项目吧、会创建Maven的web项目吧、会创建多模块项目吧。
得会配置插件pligin、依赖dependency吧
由于写项目需要导入非常多jar包,由于版本依赖,需要下载指定版本并且需要后续升级版本,手动麻烦!
操作:在配置文件内写好jar包的仓库路径、名称、版本,他会自动把所有指定的jar包下载好。
javax.servlet
javax.servlet-api
3.1.0
坐标属性:
groupId: 定义实际项目-公司名称(jar包所在仓库路径);
artifactId:定义Maven模块-项目名;
version:定义版本。
在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。 在该 POM 中可用
不同IDE项目结构不同,但是只要是Maven管理的项目,项目结构一致,避免不同IDE打开产生错误。
通过插件(plugin)形式引入服务器
org.mortbay.jetty
maven-jetty-plugin
6.1.25
10
/test
mvn -v查看Maven版本,如果没有配置,上网看教程安装配置maven环境变量(Mac版)_ElenaYu的博客-CSDN博客
1、下载压缩包到自己选定的文件夹
2、设置镜像源、指定jar包仓库路径
3、编辑环境变量配置文件 重启。成功
注意要全局配置Maven环境。如果仅仅是局部配置仅针对当前项目,新项目仍需重新配置。
① 你的 maven 安装目录。
② 你的 maven setting.xml 文件
③ 你的 maven 仓库,所有下载的 jar 包都会缓存到这个文件夹。
显示出src目录结构需要等待一段时间。
手动创建resources 【directory目录】 此时此目录为普通目录。 Mark标记为resources root让Maven识别为资源目录
如编译、打包为jar包供其他项目使用
与创建Java项目类似。
Webapp目录存放资源 jsp页面 html页面等。
(以下内容直接删除)
...
普通Java项目只需要打包 或者编译就可以;Web项目需要看见页面,需要服务器支持,有jetty 和 Tomcat俩类任选一。使用服务器要去其官网下载对应的Maven插件,将服务器的插件配置文件粘贴上。
常下载的文件:jar包 & 插件
分类:
远程仓库 :中央仓库(https://mvnrepository.com/ )、私服、其他公共库
本地仓库
Maven根据坐标寻找构件时,首先查看本地仓库,有就用,没有就远程仓库查找下载到本地仓库。
私服也就是本局域网内的镜像源。
作用:精简化项目
创建Java项目,注意勾选SDK版本
1、在maven_parent基础上创建模块
2、选择模板
与创建maven_dao模块一模一样
与创建maven_dao模块只有一个区别:在选择模版时选择Webapp
设置jdk版本(1.8)、单元测试junit版本、删除多余配置(
controller模块要依赖service模块,service模块要依赖dao模块。即controller要调用service内方法,service要调用dao内方法。
在controller配置文件中添加service的
在mvn仓库搜索servlet版本就可以找到对应的dependency
maven_controller模块里面是Webapp模块,需要手动创建Java包并定义为source root 才可以创建类
jar包:Java项目的压缩包 war包:Web项目的压缩包
通过pom.xml配置方式实现打包时的环境选择。
1、web项目一般无java文件夹,手动添加并标记
2、手动添加sources目录并标记、并添加配置文件
添加到pom.xml的build标签内
-P指定要打包的profile的id
skip表示跳过测试的打包
junit
junit
4.11
test
1、依赖的基本坐标:groupId, artifactId, version(Maven根据坐标才能找到需要的依赖)
2、依赖的类型:Type (大部分情况下不需要声明。 默认值为jar)
3、依赖的范围:Scope (compile,test,provided,runtime,system)
4. Optional:标记依赖是否可选
5. Exclusions: 用来排除传递性依赖。
*compile: 编译依赖范围。
若无指定,则默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。
*test: 测试依赖范围。
使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或运行项目的使用时将无法使用此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。
*provided: 已提供依赖范围。
使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。例servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如:servlet-api)
*runtime: 运行时依赖范围。
使用此依赖范围的Maven依赖,对于测试和运行classpath有效,编译主代码时无效。例JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或运行项目的时候才需要实现上述接口的具体JDBC驱动。
*system: 系统依赖范围。
该依赖与三种classpath的关系,和provided依赖范围完全一致。但使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。
传递依赖机制, 让我们在使用某个jar的时候就不用去考虑它依赖了什么。也不用担心引入多余的依赖。 Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前项目中。
注意: 传递依赖有可能产生冲突!!
A --> B --> C (2.0)
A --> E --> C (1.0)
如果A下同时存在两个不同version的C,冲突!!
(使用exclusions标签选取同时适合A、B的版本)
A
A
xxx
C
C
B
B
这里的
C
C
来排除冲突的
原因:依赖包下载不了
IDEA中Maven依赖包下载不了的问题解决方案汇总_idea maven包下载不下来_谜一样的码农的博客-CSDN博客
2、Cannot resolve symbol ‘HttpServlet‘
手动添加jar包
Cannot resolve symbol ‘HttpServlet‘_DarkYoung•的博客-CSDN博客