注:参考资料如下
【(超详细)2021最新Maven教程-Maven基础篇之Maven实战入门-最新IDEA版maven【半天快速掌握,附全套视频资料】】 https://www.bilibili.com/video/BV1Fz4y167p5/?share_source=copy_web
一、简介
Maven是一个跨平台的项目管理工具,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理,是一个自动化构建工具。Maven是Apache组织的一个颇为成功的开源项目。
二、四大特性
-
依赖管理系统
管理jar包,jar包升级时修改配置文件即可。用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。
如下:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency>
-
groupId
定义当前Maven项目隶属的实际项目-公司名称。
-
artifactId
定义实际项目中的一个Maven模块-项目名。
-
version
定义Maven项目当前所处的版本。
-
-
多模块构建
定义一个parent POM 作为一组module的聚合POM ,在该POM中可以使用标签
来定义一组子模块。parent POM不会有实际构建产出,而parent POM中的build配置以及依赖配置都会自动继承给子module。
-
一致的项目结构
设计理念——约定大于配置。其制定了一套项目目录结构作为标准的java项目结构,解决不同ide带来的文件目录不一致问题。
-
一致的构建模型和插件机制
三、Maven的安装配置和目录结构
1. 检查JDK版本
JDK1.7及以上版本
2. 下载Maven
3. 配置Maven环境变量
maven配置环境变量_maven配置环境变量配置-CSDN博客
mvn -v
4. Maven的目录结构
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件 |
${basedir}/src/test/java | 项目的测试类,比如说JUnit代码 |
${basedir}/src/test/resources | 测试使用的资源 |
-
POM标签大全
四、 启动Maven项目
1. (建议)配置本地仓库和阿里云镜像
Maven配置仓库、阿里云镜像、环境变量(史上最全最详细)_maven配置阿里云镜像_FBI HackerHarry浩的博客-CSDN博客
Maven的安装与配置_windows 配置maven本地用反斜杠还是-CSDN博客
2. cmd下编译并运行
-
编写主函数
-
项目根目录,进入cmd
-
编译java文件
mvn compile
成功则出现 BUILD SUCCESS
-
执行main方法
mvn exec:java -Dexec.mainClass="com.xxx.demo.Hello"
-
编译失败可能的问题:
1.不是使用管理员权限执行dos命令 2.JDK环境配置有问题,重装JDK 3.代码编写时,类里面没设置包名(如果编译时类没加包名,执行时也不需要加包名)
-
五、 Maven命令
1. 基本命令
命令 | 描述 |
---|---|
mvn -version | 显示版本信息 |
mvn clean | 清理项目生产的临时文件,一般是模块下的target目录 |
mvn compile | 编译源代码,一般编译模块下的src/main/java目录 |
mvn package | 项目打包工具,会在模块下的target目录生成jar包或war等文件 |
mvn test | 测试命令,或执行src/test/java下的junit的测试用例 |
mvn install | 将打包的jar/war文件复制到你的本地仓库中,供其他模块使用 |
mvn deploy | 将打包的文件发布到远程仓库,提供其他人员进行下载依赖 |
mvn site | 生成项目相关信息的网站 |
mvn eclipse:eclipse | 将项目转化为Eclipse项目 |
mvn dependency:tree | 打印出项目的整个依赖树 |
mvn archetype:generate | 创建Maven的普通java项目 |
mvn tomcat7:run | 在tomcat容器中运行web项目 |
mvn jetty:run | 调用Jetty插件的Run目标在Jetty Servlet容器中启动web应用 |
2. 命令参数
-
-D 传入属性参数
mvn packeage -Dmaven.test.skip=true
以-D开头,将maven.test.skip的值设为true,就是告诉maven打包的时候跳过单元测试。
-
-P 使用指定的Profile配置
mvn packege -Pdev -Dmaven.test.skip=true
打包,找dev环境的配置文件,跳过单元测试
六、 IDEA编辑器集成Maven环境
七 、Maven项目的创建
1. 创建Java项目
1. 创建项目
-
打开IDEA,新建项目,选择Maven
-
设置项目的GroupId和ArtifactId
-
检查Maven环境
-
检查项目名和工作空间
-
等待项目创建,下载资源,创建成功
2. 编译项目
-
点击右上角的“ADD Configurations”,打开“Run/Debug Configurations"窗口
-
点击左上角的“+”号,选择“Maven”
-
设置编译项目的命令
-
执行编译
2. 创建Web项目
1. 创建项目
步骤与创建Java项目基本一致,区别在于选择Maven模板,web选择webapp,如下图
目录结构如下:
2. 启动项目
-
修改pom.xml文件
-
修改JDK版本为1.8
-
设置单元测试的版本
-
删除pluginManagement标签
-
添加web部署的插件
在build标签中添加plugins标签
-
Jetty插件
-
Tomcat插件
-
-
-
启动项目
Jetty插件配置
也可以输入命令指定端口启动
jetty:run -Djetty.port=9090 #需要将插件配置中的port标签去掉
启动
tomcat插件配置
八、 Maven仓库的基本概念
-
仓库分为两类:本地仓库、远程仓库
-
当Maven根据坐标寻找构件,会先查看本地仓库,如果没有,才去远程仓库找,找到后下载到本地仓库使用。如果本地和远程都没有,Maven就会报错
-
远程仓库分为三种:中央仓库、私服、其他公共库
-
中央仓库 : 默认配置下Maven下载jar包的地方。慢,一般不使用。
-
私服 :为了节省带宽和时间,在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。
-
其他公共库 :阿里云仓库等
-
-
Maven仓库地址:Maven Repository: Search/Browse/Explore (mvnrepository.com)
九、 Maven环境下构建多模块项目
这里以四个模块为例,来搭建项目
模块 maven_parent -- 基模块 (pom)
模块 maven_dao -- 数据库的访问层,例如jdbc操作(jar)
模块 maven_service -- 项目的业务逻辑层 (jar)
模块 maven_controller -- 用来接收请求,响应数据(war)
-
创建maven_parent项目
-
创建maven_dao模块
-
创建maven_service模块
创建maven_service模块的步骤与maven_dao模块一致。
-
创建maven_controller模块
与上面基本一致,只需要将第一步选择Maven模板设置为web项目即可。(maven-archetype-webapp)
全部建完后效果如下:
-
设置模块的配置
-
设置jdk版本
-
单元测试Junit版本
-
删除多余的配置
-
-
设置模块之间的依赖
-
maven_dao
- 新建包
- 包中创建UserDao类
- 类中添加方法
-
maven_service
- 添加maven_dao的依赖
- 在项目中添加UserService类,并添加方法
-
maven_controller
- 添加maven_service模块的依赖
- 添加Servlet的依赖
- 新建Java类,集成HttpService,并重写service方法
- 添加Tomcat插件
-
依次install各个模块(先父项目,最后tomcat)
-
十、 Maven的打包操作
一般来说,普通java项目打包成jar包,web项目打包成war包
打包war包:
-
建立对应的目录结构
-
添加Profile配置
-
设置资源文件配置
-
执行打包操作
Spring Boot Maven plugin打包
IDEA 打包、Spring Boot Maven plugin 打包可执行 Jar、war 程序_maven war和jar plugin-CSDN博客
十一、 解决Maven依赖冲突
如何解决Maven依赖冲突_maven依赖冲突的两种解决方式_Q-T的博客-CSDN博客
场景:
Maven传递性依赖机制,有可能产生冲突。
处理方式
-
Idea插件 Maven Helper