-
快速入门
- 环境搭建
- IDEA创建项目
- 目录结构分析
-
高手进阶
- repository仓库解析
- pom.xml配置详解
- GAV软件定位坐标
- mvn命令 & 生命周期
- maven项目手工构建
- maven项目自动构建
-
高级应用
- 依赖范围解析
- 项目继承下的依赖
- 项目聚合下的依赖
- 项目常用插件配置
- 私有服务器管理
-
应用拓展
- 基础应用:Java SE项目
- 应用升级:Java WEB项目
- 应用拓展:SSM项目构建
- 应用拓展:SpringBoot项目
- 应用拓展:测试项目应用
Maven: 一个用于自动化构建项目和管理项目依赖的工具
环境搭建 1、 JDK Java Development Kit JAVA_HOME CLASSPATH PATH
$ java -version
java version "1.8.0_251"
2、 Maven MAVEN_HOME version1 M2_HOME version2 PATH version3
下载地址 https://maven.apache.org/
配置环境变量
vim ~/.bash_profile
# maven
export MAVEN_HOME=/Users/Applications/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin
查看maven版本
$ mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
3、 IDEA
Maven创建项目配置IDEA的Maven路径,选择自定义安装的路径
1、快速构建web项目 选择Maven项目 maven-archetype-webapp
2、管理Maven依赖,分析依赖关系
搜索依赖地址:https://mvnrepository.com/
pom.xml添加依赖
javax.servlet
javax.servlet-api
3.1.0
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.2.1
provided
插件列表:https://maven.apache.org/plugins/index.html
pom.xml添加插件
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
3、运行项目,检测Maven项目
(1)Maven
运行命令
$ mvn tomcat7:run
可以配置到启动命令
选择Maven -> Command line添加tomcat7:run
(2)添加到Tomcat
配置启动命令
选择Tomcat -> Deployment -> Artifact
4、防火墙影响访问国外仓库: [Info] Generating project in Batch mode
配置阿里云中央仓库
https://maven.aliyun.com/mvn/guide
$ vim ~/.m2/settings.xml
aliyunmaven
*
阿里云公共仓库
https://maven.aliyun.com/repository/public
项目结构
.
├── pom.xml
├── src # source
│ └── main
│ ├── java # 业务代码
│ ├── resources # 资源文件
│ └── webapp
│ ├── WEB-INF
│ │ └── web.xml
│ └── index.jsp
└── target # 目标文件
pom.xml project object model 项目对象模型 package object management 依赖包对象管理器
Maven基础操作1、仓库 Repository
配置文件默认路径:~/.m2/settings.xml
- 远程仓库/中央仓库/国内镜像仓库
alimaven
central
aliyun maven
https://maven.aliyun.com/repository/public
- 本地仓库
~/.m2/repository
- 私有服务器
全局配置 settings.xml
${user.home}/.m2/repository
true
false
false
jdk1.8_profile.xml
jdk-1.8
true
1.8
1.8
1.8
1.8
项目配置 pom.xml
优先级 :
项目配置pom.xml > 用户配置settings.xmlnote > 全局配置settings.xml
完整配置: Maven: settings.xml、pom.xml完整配置
GAV坐标版本号:
软件名称.主版本号.小版本号.阶段版本号.字母版本号
字母版本号: alpha 内测版 beta 公测版 rc 候选版 stable 稳定版 release/r/ga 发布版 final 最终版
Maven命令操作1、项目构建命令
mvn --version
mvn archetype:generate
2、项目清理、编译、打包
mvn clean
mvn compile
mvn package
3、项目运行、测试、发布
mvn tomcat:run
mvn test
mvn site
mvn dependency:tree
mvn install
mvn deploy
Maven生命周期
clean lifecycle 项目构建之前的清理环节 default lifecycle 项目编译和打包环节 site lifecycle 项目报告,站点信息,发布环节
构建Maven项目1、手工构建Maven项目
项目结构
$ tree
.
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── demo
│ │ └── Hello.java
│ └── resources
└── test
├── java
│ └── com
│ └── demo
└── resources
pom.xml文件 https://maven.apache.org/guides/getting-started/index.html
4.0.0
com.demo
hello
1.0-SNAPSHOT
jar
Hello.java
package com.demo;
public class Hello{
public static void main(String[] args){
System.out.println("Hello");
}
}
# 清理
$ mvn clean
# 编译
$ mvn compile
# 运行
$ mvn exec:java -Dexec.mainClass="com.demo.Hello"
2、命令构建Maven项目
创建命令
# 3.0.5
mvn archetype:generate
参数
-DgroupID=""
-DartifactID=""
-DpackageName=""
-DarchetypeArtifactId="maven-archetype-quickstart/maven-archetype-webapp"
-DinteractiveMode=false
eg:
$ mvn archetype:generate \
-DgroupId=com.demo \
-DartifactId=java-demo \
-DpackageName=com.demo \
-DarchetypeArtifactId=maven-archetype-quickstart
3、工具构建Maven项目
使用 IDEA创建Maven项目
archetype项目骨架加载过慢问题拷贝archetype-catalog.xml
到目录
~/.m2/repository/org/apache/maven/archetype/archetype-catalog/3.1.2
IDEA Build Tools -> Maven Runner设置VM Options:
-DarchetypeCatalog=local
自定义archetype项目骨架解决版本问题
windows如果报错需要修改
mvn.cmd -> mvn.bat
# 构建项目骨架
$ mvn archetype:create-from-project
# 安装到本地仓库
$ mvn clean install
Maven依赖范围管理
软件的依赖:
- G: groupID
- A: artifactID
- V: Version
- Scope
- compile 编译、运行、测试、打包(默认)
- provided 编译、运行 eg: servlet
- runtime 运行、打包 eg: mysql
- test 测试
- system 编译、运行
Maven父子项目依赖传递
父子项目 优点:
- 合理有效的复用依赖jar包
- 子项目互相独立,更加便于敏捷开发和独立管理
缺点:
- 项目之间的系统集成性能较差
父项目pom.xml
4.0.0
com.demo
maven-parent
1.0-SNAPSHOT
maven-parent
http://www.example.com
pom
UTF-8
1.8
1.8
1.2.17
4.11
5.1.9.RELEASE
junit
junit
${junit.version}
test
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
log4j
log4j
${log4j.version}
子项目pom.xml
4.0.0
com.demo
maven-parent
1.0-SNAPSHOT
../maven-parent/pom.xml
maven-wiki
1.0-SNAPSHOT
maven-wiki
http://www.example.com
UTF-8
1.7
1.7
junit
junit
4.11
test
log4j
log4j
Maven项目聚合统一管理
项目聚合关系: 项目之间整体性较高,便于系统集成和维护
maven-child1
maven-child2
Maven插件管理
生命周期插件
- resources
- source
- clean
- compile
常用操作插件
- tomcat7
- dependency
- jar
Maven插件查找 https://maven.apache.org/plugins/index.html
查看依赖插件
org.apache.maven.plugins
maven-dependency-plugin
3.1.2
查看依赖
$ mvn dependency:tree
IDEA中可以右键查看依赖图
Maven私有服务器- Apache Archiva
- JFrog Artifactory
- Sonatype Nexus
下载页面: https://www.sonatype.com/nexus/repository-oss/download
Products->Nexus Repository Manager->OSS Edition
或者: https://help.sonatype.com/repomanager3/download
国外地址无法下载,找到一个方法,使用香港的服务器下载后再下载到本地
百度网盘下载: 链接: https://pan.baidu.com/s/1HY3Cwr8KSCm92JByc_BmQg 提取码: 6jwk
操作
# 启动
cd bin
$ ./nexus start
默认端口: http://localhost:8081/
创建私有仓库私有服务器分类
- proxy 代理远程仓库
- group 分组管理
- hosted 发布本地开发项目
- releases 稳定版
- snapshots 快照版
依赖查找顺序:
本地仓库 < 私有仓库 < 中央仓库
登录之后可以创建新的仓库
1、从私有仓库通过代理下载依赖 pom.xml
my-central
My Central
http://localhost:8081/repository/my-central/
true
true
2、发布项目 pom.xml
com.demo
maven-demo
1.0-SNAPSHOT
1.0-RELEASE
my-release
My Release
http://localhost:8081/repository/my-release/
my-snapshot
My Snapshot
http://localhost:8081/repository/my-snapshot/
配置账号密码 ~/.m2/settings.xml
my-snapshot
admin
123456
my-release
admin
123456
发布
$ mvn deploy
Maven构建JavaSE项目
通过IDEA创建Maven项目
项目结构
.
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── demo
│ │ └── HelloWorld.java
│ └── resources
└── test
└── java
HelloWorld.java
package com.demo;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello");
}
}
运行方式:
-
直接运行
-
配置运行参数
exec:java -Dexec.mainClass="com.example.HelloWorld"
Maven构建JavaWeb项目
项目骨架:maven-archetype-webapp
手工创建
项目结构
.
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── demo
│ │ └── HelloServlet.java
│ ├── resources
│ └── webapp
│ ├── WEB-INF
│ │ └── web.xml
│ └── index.jsp
└── test
└── java
pom.xml
4.0.0
com.demo
java-web-demo
1.0-SNAPSHOT
war
javax.servlet
javax.servlet-api
3.1.0
provided
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
web.xml
index.jsp
index.jsp
Demo
我的web项目
HelloServlet.java
package com.demo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 使用 WebServlet 需要配置 web.xml
* version > 3.0
* metadata-complete=false
*
* 参考:https://www.cnblogs.com/iCheny/p/10976735.html
*/
@WebServlet(value = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Hello World.");
}
}
项目构建 Project Structure 创建Web 模块
两种方式启动:
1、命令行运行
$ mvn tomcat7:run
2、配置Tomcat
IDEA的即改即生效都不是太好,开发起来很痛苦啊 Eclipse 生效很及时
以Debug模式运行,编译后就生效了
依赖冲突1、依赖直接冲突
commons-beanutils
commons-beanutils
1.9.4
org.apache.poi
poi
3.5-FINAL
commons-logging
commons-logging
2、依赖传递冲突
课程总结-
环境搭建,文件结构
-
项目构建,配置梳理
-
仓库,坐标,命令和生命周期
-
项目依赖的范围管理
-
父子项目的传递,聚合项目的管理
-
私有服务器的构建使用
-
增强项目功能的插件
-
不同类型项目的构建
-
解决项目中的依赖冲突