Maven入门
一、Maven简介
1.Maven是什么
定义: Project Management(项目管理工具)
包含:
- POM: 项目对象模型
- 一组标准集合
- 一个项目声明周期
- 依赖管理系统
- 插件
2.Maven解决项目中的什么问题
- [项目的自动构建]:
- 项目的编译,测试,运行,打包【jar,war】,安装【本地仓库】,部署【远程仓库】 由maven自动完成
- [项目的依赖管理]:
- 项目中的所需要依赖jar包,自动加载
( 自动从远程仓库中下载需要的依赖jar包文件(先在本地找)
- 项目中的所需要依赖jar包,自动加载
二、Maven安装与配置
1.Maven下载
注意:
-
与 Tomcat相同, Maven安装之前,需要先装JDK
-
maven工具本身是由java语言开发 --所以想要运行maven, 需要jdk的支持,而且不同的Maven版本号需要与兼容的JDK版本号对应
2.Maven安装
只需要解压缩到目标位置,即可!
3.maven配置
环境变量的配置:
JAVA_HOME - x:\xxx\xxx\JDK1.8.0xx\
path: - %JAVA_HOME%\bin - 可执行工具,命令
MAVEN_HOME : (不要使用有中文命名的路径)
Path 添加bin目录

验证maven是否配置成功:
通过cmd模式,输入命令mvn -v
三、第一个Maven项目
- 可以使用Maven命令项目: [了解]
archetype - 原型,骨架
|- maven-archetype-quickstart 表示普通的java项目
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
- Pom.xml
The pom.xml
file is the core of a project’s configuration in Maven.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.woniu.demo</groupId>
<artifactId>mvndemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
-
手动创建maven项目目录结构
-
编写源码与测试类:
package com.woniu.demo;
public class Hello {
public void print(String name){
System.out.println("Hello,"+name);
}
}
测试类:-----------------------------------------------------------------------------
package com.woniu.demo;
import org.junit.Test;
public class TestHello {
@Test
public void testPrint(){
Hello h = new Hello();
h.print("Maven");
}
}
-
编译
在编译和测试运行,打包之前,先修改maven的配置:
maven/conf/settings.xml :
本地仓库的位置:
<localRepository>d:/cangku/localrepo</localRepository>
默认的位置:C:\Users\用户名\ .m2\repository
远程仓库的镜像: mirror
|- 推荐使用阿里
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
编译项目:
|-如果是第一次使用maven来进行编译,此时会从仓库下载maven的编译器插件程序[jar]
|-效果生成一个 target 目录 [目标]
mvn compile
-
测试项目
|-效果: 先对src/java源码进行编译
编译测试类输出到target/test-classes /目录中
并且,会执行Test类中所有@Test注解的测试方法
test/java/com/xx/xx/Test.java
mvn test
四、maven核心概念 【重点记忆】
主要功能:
- 依赖管理
- 自动构建
1.Maven项目的目录结构
|-web-inf/: 【对客户端不可见,只有服务端可见】
target - 编译时产生该目录,用于存放编译,打包后的文件
main/resources --用于**存放属性配置资源文件 [*.xml, *.properties] [可选]
main/webapp – 【可选】当项目是一个web项目时,才会创建该目录,存放web相关资源 [web.xml,jsp,html,css,js]
test/resources --测试类所需要用到 资源文件 [可选]
2.POM
-
Maven是以项目为中心的设计
-
POM - Project Object Model 项目对象模型,是maven项目的核心文件
-
POM文件的组成部分:
1> 根元素 <project xsd-schema约束 >
2> 模型版本号: 固定 4.0.0
<modelVersion>4.0.0</modelVersion>
3> 当前maven项目的坐标
<!--
groupId 代表组织机构名称 通常使用公司名称表示
还有一个作用:当我们将此maven项目打包安装时,使用该groupId作为安装目录的深度
-->
<groupId>com.woniu.demo</groupId>
<!--artifact - 构件,手工制品 - 项目名称|模块名称 -->
<artifactId>mvndemo</artifactId>
<!--当前maven项目的版本号 1.0 SNAPSHOT快照[不稳定版本],RELEASE[发行版] ,LASTER
当项目部署至远程服务器时,会根据版本名称,放在不同的目录下
-->
<version>0.0.1-SNAPSHOT</version>
<!--打包类型-->
<packaging>[jar,war,pom]</packaging>
4> <properties> </properties>配置项目的全局变量
5> 依赖管理的配置
<dependencies>
<dependency>
<!--所依赖项目的坐标信息 GAV -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
...
</dependencies>
6> 插件的配置
|-如果当前maven项目需要使用一些插件 比如:tomcat插件
<book>
<id></id>
<title></title>
</book>
<author>
</author>
3.坐标与依赖
每个maven项目都有坐标 – GAV [groupId、artifactId、version]
groupId -通常与包名对应 [ 不是必须]
artifactId - 代表项目,模块的名称
version -版本号
依赖dependency :
推荐一个Maven坐标查询网站:https://mvnrepository.com/
4.仓库Repository
分类:
本地仓库 - local Repository
远程仓库 - remote Repository
|- 中央仓库 – [官方] - 由 Maven 社区提供的仓库,其中包含了大量常用的库
|- 私服 [百度,阿里] --镜像mirror —开发人员自己定制仓库
通过conf/settings.xml配置本地与远程仓库的镜像:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
-->
<localRepository>e:/localrepo</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
五、使用Idea创建maven工程
在使用idea创建Maven工程之前,需要先配置maven
File–>Settings [ctrl+alt+s]–> Build Tools -->Maven
注意:配置好maven后,建议在File–>new project setting…,后面新建的项目继续使用的配置

1.Idea创建Maven项目

2.Idea整合MyBatis
如果需要在maven项目中使用mybatis,需要添加两个依赖:
(1) 添加依赖 mybatis.jar, jdbc.jar
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--jdbc-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
Idea设置小技巧: 设置Idea 自动导入 :

(2) 在maven工程中的resources/目录中 ,添加mybatis相关核心配置文件 :
mybatis-config.xml
db.properties 属性配置文件 [key=value]
|- user,password,driver,url
xml映射文件 com/woniu/dao/UserDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.woniu.dao.UserDao">
<insert id="saveUser" parameterType="User">
insert into t_user(username,password) values(#{username},#{password})
</insert>
</mapper>
(3)创建Dao接口 – > UserDao
public interface UserDao {
//保存用户
public void saveUser(User user);
}
(4) 在Test包中添加测试类,实现saveUser测试:
import java.io.InputStream;
public class DaoTest {
@Test
public void testSaveUser() throws Exception{
// 创建指向核心配置文件的输入字节流
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 根据字节流读取的信息创建一个SqlSessionFactory会话工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(); //.var 用于生成获取返回值对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = new User("Mike","111");
userDao.saveUser(user);
sqlSession.commit();
System.out.println("添加用户成功!");
}
}
3.Idea创建web工程
补充maven设置:
创建的maven工程使用的默认JDK的版本号
maven/conf/settings.xml
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
关于pom.xml中packaging标签:
表示当前项目的打包类型:
1) jar [默认类型]
2) war [web工程]
3) pom [聚合工程使用]
步骤:
(1) 选择Idea提供的maven web骨架archetype模板
(2) 手动创建java - src/main/java 目录 src/main/resources以及src/test/java、src/test/resources目录
右键-->Mark Directory as -->...
(3) 添加serlvet-api 和 jsp-api依赖 [Tomcat本身提供]
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!--JSP-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
(4) 创建Servlet类
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("/main.jsp").forward(req,resp);
}
}
(5) 添加Servlet配置
|-web.xml servlet的映射路径
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.woniu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
|-使用@WebServlet注解
注意:要想使用该注解来取代 web.xml中关于servlet的配置,必须满足:
a. web.xml --web版本的标准必须是3.0以上
b. servlet-api -依赖的版本,3.0以上
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
}
(6) 使用外部tomcat来运行maven的web项目


War与war exploded两种模式的区别:
(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;
(2)war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>