Maven讲义
Maven概述
Maven是什么
Maven是一个由Apache基金会维护的项目构建工具。
项目构建是什么
我们将项目的代码从源代码到具体程序文件的过程称为代码构建。
行为包括:编译、测试、运行、打包、部署的过程
Eclipse项目构建
构建过程如下:
创建一个Web项目
在项目中编写好源代码和配置文件
对源代码编译生成class文件
通过Junit对代码单元测试
将项目通过Eclipse工具放在Tomcat运行
将项目导出war,放在Tomcat运行
Maven构建项目
通过Maven构建工具可以一条命令完成上面所有的操作:
clean,清除命令,作用清除已经编译的class文件和war文件
compile,编译命令,作用是将java文件编译成class文件
package,打包命令,作用将class文件打成war包
test,测试命令,作用执行Junit工具(可以忽略)
deploy,部署命令,将war包放在指定的tomcat(可以忽略)
运行Tomcat,通过命令tomcat7:run (要加入Maven工具的Tomcat7插件)
install,安装命令,一条命令包括了,clean complile package test
使用Maven的好处
使用命令,一键快速编译部署
对项目的构建更加精细化,适合大型项目的构建
Maven支持直接通过配置文件(POM)的配置下载依赖的包
各大开源社区强制使用Maven导包,意味着如果不学它,有很多的开源项目不好入门。
Maven的安装
Maven说明
下载路径:http://maven.apache.org/download.cgi
目录说说明:
环境配置
第一步:确定JAVA_HOME配置
前提:如果要在CMD命令行运行Maven,必须要配置JAVA_HOME环境变量
通过set命令
如果没有配置JAVA_HOME环境会导致运行获得Java运行环境,异常如下:
第二步:配置MAVEN_HOME环境变量
第三步:指定Maven执行命令到当前目录
配置执行目录到PATH环境变量,让命令可以在当前目录可以执行
--变量Path变量
--成功增加结果变量:%MAVEN_HOME%\bin
第四步:测试配置,在CMD下键入mvn -h
如果返回参数提示如下图,说明配置成功!
第五步:配置Maven国内源
由于默认Maven使用国外的源,会导致下载jar比较慢。
配置Maven下conf文件夹的settings.xml文件
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
mirrorId
repositoryId
Human Readable Name for this Mirror.
http://my.repository.com/repo/path
-->
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
入门配置
需求:通过命令行,使用Maven项目创建一个Java项目,并且打包。
第一步:创建项目
使用mvn archetype:generate命令创建java项目
第二步:设置坐标信息
设置坐标信息,通过以下三个信息确定坐标。标记全球Maven项目的唯一性。
groupId:组织ID
artifactId:项目名
package:包名
--提示,创建成功
第三步:编译项目
使用命令mvn compile
--编译成功,生成target文件夹
第四步:打包
通过命令mvn package
--打包成功,在target文件夹下会生成jar包
--通过该入门示例,可以发现,使用Maven创建构建项目,是可以不依赖任何开发工具的。
通过该入门示例,我们看到了我们需要学习的内容包括:Maven的命令、仓库
问题:默认Maven仓库在哪里?
答:C:\Users\YL\.m2,在登录用户的个人文件夹里面的.m2文件夹就是仓库
问题:有什么办法了解更多的mvn的命令呢?
答:mvn下的命令都是一个插件,Maven工具内置的可以使用的插件都在其官方帮助文档找到说明。
https://maven.apache.org/plugins/index.html
[if !supportLists]4. [endif]Eclipse使用Maven
[if !supportLists]4.1. [endif]配置Maven
[if !supportLists]4.1.1. [endif]第一步:打开Eclipse首选项
[if !vml]
[endif]
[if !supportLists]4.1.2. [endif]第二步:配置外部Maven
配置指定外部的Maven
[if !vml]
[endif]
--选择使用配置的外部的Maven
[if !vml]
[endif]
[if !supportLists]4.1.3. [endif]第三步:【可选】查看默认本机仓库
[if !vml]
[endif]
[if !supportLists]4.2. [endif]通过Maven创建普通项目
[if !supportLists]4.2.1. [endif]第一步:创建一个Maven项目
[if !vml]
[endif]
[if !supportLists]4.2.2. [endif]第二步:创建一个自定义的Maven项目
[if !vml]
[endif]
[if !supportLists]4.2.3. [endif]第三步:设置项目构建信息
GroupId:组编号
ArtifactId:项目标识符(项目的项目名)
注意:Maven是通过GroupId和ArtifactId来确定项目的唯一性,我们称为坐标。任何项目要发布到Maven的库中,必须要有一个全球唯一的坐标。
Version:发布的版本号
Packaging:打包方式。
[if !supportLists](1)[endif]jar:以jar包方式打包,普通java项目
[if !supportLists](2)[endif]war:以war包方式打包,是web项目
[if !supportLists](3)[endif]pom:不打包,表示该项目是一个聚合项目。在多子项目的项目中,用于管理公用Maven构建属性
Name:【可以忽略】就是一个项目的一个名称,实际实战中,一般跟ArtifactID一致。
Description:【可以忽略】就是项目的描述
[if !vml]
[endif]
--创建成功
[if !vml]
[endif]
[if !supportLists]4.2.4. [endif]第四步:创建一个简单的HelloWorld类
package cn.zj;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
[if !supportLists]4.2.5. [endif]第五步:构建项目
注意:
[if !supportLists]1. [endif]Maven build:用于执行Maven的命令
[if !supportLists]2. [endif]Maven Clean:等同执行mvn clean
[if !supportLists]3. [endif]Maven generate-source:等同mvn build
[if !supportLists]4. [endif]Maven Intall:等同 mvn install 。同时执行,清除、编译、测试、打包、并将包安装到maven仓库
[if !vml]
[endif]
--构建成功
[if !vml]
[endif]
[if !supportLists]4.3. [endif]通过Maven创建Web项目
[if !supportLists]4.3.1. [endif]第一步:创建一个Maven项目
[if !vml]
[endif]
--创建项目后,报错信息。提示没有web.xml
解决方案:
[if !supportLists](1)[endif].通过
[if !supportLists](2)[endif].创建一个web.xml文件
[if !vml]
[endif]
[if !supportLists]4.3.2. [endif]第二步:创建web.xml
[if !supportLists]1. [endif]创建一个在src/main/webapp下创建WEB-INF文件夹
[if !vml]
[endif]
[if !supportLists]2. [endif]在WEB-INF文件下创建一个web.xml文件
--通过xsd规则文件创建
[if !vml]
[endif]
--创建成功后,报错消失。!!!!
选中项目右键
[if !vml]
[endif]
[if !supportLists]4.3.3. [endif]第三步:创建一个index.jsp
[if !vml]
[endif]
发现,报错。原因是没有加入JSP依赖的ServletAPI以及JSP的类库。
[if !supportLists]4.3.4. [endif]第四步:通过POM.xml加入依赖的类库
--依赖的类库的jar的坐标取哪里找?
答:可以在一下的公有仓库找。
http://mvnrepository.com/
http://search.maven.org/
注意:以后我们开发出来的功能组件希望让别人通过Maven使用,也可以提交到这两个用于库
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
注意事项,创建Maven项目是报异常,可以强制更新项目
--右击项目-->选择Maven-->Update Project
[if !vml]
[endif]
--强制更新
[if !vml]
[endif]
[if !supportLists]4.3.5. [endif]第五步:通过Maven运行Tomcat启动项目
-1.安装tomcat7的Maven插件
所有的Maven工具内置插件都是有在https://maven.apache.org/plugins/index.html找到。
[if !vml]
[endif]
--安装2.2 版本
[if !vml]
[endif]
在pom.xml 配置配置tomcat插件
[if !supportLists]4.3.6. [endif]使用Tomcat插件运行Maven项目
点击项目鼠标右键
[if !vml]
[endif]
[if !supportLists]4.3.7. [endif]Maven下面Tomcat插件 项目细节配置
Tomvat 默认项目上下文路径是项目名称,默认端口是8080
开发者可以手动配置插件信息
[if !supportLists]5. [endif]修改jre 依赖版本
Maven 默认依赖的jar版本是 1.5,开发者可以配置jre版本,有两种配置方式
[if !supportLists]5.1. [endif]单独为某一个项目配置
[if !supportLists]5.2. [endif]修改setting.xml配置文件
可以修改 maven根/confg/setting.xml 在
以后创建的项目全部都是1.8版本
[if !supportLists]6. [endif]通过Maven创建多个工程组成的项目
需求:使用Maven项目创建一个ssm整合的项目。项目的每一层为一个工程。
[if !supportLists]6.1. [endif]第一步:创建Maven项目
注意:
[if !supportLists]1. [endif]表示层是WEB项目,其他的都是功能组件,所以使用普通的Jar项目
[if !supportLists]2. [endif]Parent项目是一个聚合项目,主要用于维护统一的包依赖,统一的插件,统一构建项目(测试、编译、打包)
[if !supportLists]6.1.1. [endif]创建parent-项目
[if !vml]
[endif]
[if !supportLists]6.1.2. [endif]创建聚合项目的子模块项目
[if !vml]
[endif]
[if !supportLists]6.1.3. [endif]最终效果
[if !vml]
[endif]
[if !supportLists]6.2. [endif]第二步:Eclipse实现项目分组
[if !supportLists](1) [endif].将项目列表使用Working Sets显示
[if !vml]
[endif]
[if !supportLists](2) [endif].插件一个项目分组
[if !vml]
[endif]
[if !supportLists](3)[endif]设置项目组信息
[if !vml]
[endif]
--分组后结果
[if !vml]
[endif]
[if !supportLists]6.3. [endif]第三步:聚合项目后的效果
--聚合所有需要构建的工程,可以实现统一构建项目。所谓的统一构建项目,就是统一的执行清除、测试、编译、打包等操作
--在聚合项目ssm-parent通过
[if !vml]
[endif]
--代码
http://maven.apache.org/xsd/maven-4.0.0.xsd">
[if !supportLists]6.4. [endif]第四步:项目的继承
注意:所谓的项目继承,就是一个项目已经在pom.xml声明的各种元素,继承的子工程的pom.xml也获得该父工程的pom.xml所有声明的元素。
前提:以前如果每个工程需要使用Log4J和Junit,都要在各自的项目的pom.xml加入依赖。这样做他麻烦了。
需求:在ssm-parent声明一次依赖Log4J和Junit,其他所有的子工程都可以使用。
[if !supportLists](1)[endif]在父包加入了依赖
[if !vml]
[endif]
[if !supportLists](2)[endif]在子项目继承父工程。也获得了父工程声明的元素
[if !vml]
[endif]
[if !supportLists]6.5. [endif]第五步:依赖包的版本统一管理
需求:实现所有项目依赖的类库的版本统一管理。
答:可以通过属性的设置与版本锁定,使用依赖包的统一管理
[if !supportLists](1)[endif]父项目,设置属性与版本锁定
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
org.springframework
spring-webmvc
${springmvc.version}
[if !supportLists](2)[endif]子项目,不需要再指定版本锁定的类库的版本
http://maven.apache.org/xsd/maven-4.0.0.xsd">
org.springframework
spring-webmvc
[if !supportLists]6.5.1. [endif]依赖
Scope 声明依赖包在哪个阶段有效
Compile(默认) spring,mybatis
编译(compile)时需要测试时需要,,运行时需要,打包时需要
Provided jsp-api.jar servlet-api.jar
编译(compile)时需要,测试(test)时也需要,运行时不需要,打包时不需要
Runtime 数据库驱动包
编译时不需要,测试时需要,,运行时需要,打包时需要
Test junit.jar
编译时不需要,测试时需要,运行时不需要,打包也不需要
[if !supportLists]6.6. [endif]第六步:在ssm-web工程配置SpringMVC框架
[if !supportLists]6.6.1. [endif]导入包依赖
--在ssm-parent对依赖包版本锁定
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
org.springframework
spring-webmvc
${springmvc.version}
javax.servlet
javax.servlet-api
${servlet-api.version}
provided
javax.servlet.jsp
javax.servlet.jsp-api
${jsp.version}
provided
--在ssm-web的pom.xml导入依赖包
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
org.springframework
spring-webmvc
javax.servlet
javax.servlet-api
javax.servlet.jsp
javax.servlet.jsp-api
[if !supportLists]6.6.2. [endif]创建一个请求页面
<%@pagelanguage="java"contentType="text/html;
charset=UTF-8"
pageEncoding="UTF-8"%>
charset=UTF-8">
[if !supportLists]6.6.3. [endif]编写web.xml
"1.0"encoding="UTF-8"?>
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"version="2.5">
[if !supportLists]6.6.4. [endif]编写配置文件spring-mvc.xml
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
[if !supportLists]6.6.5. [endif]编写Controller组件类
package cn.zj.controller;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value="/user")
public class StudentController {
@RequestMapping(value="/add")
public void add(){
System.out.println("-增加用户-");
}
}
[if !supportLists]6.7. [endif]第七步:在ssm-mapper工程配置Mybatis框架
[if !supportLists]6.7.1. [endif]导入包依赖
--ssm-mapper项目导入依赖
http://maven.apache.org/xsd/maven-4.0.0.xsd">
[if !supportLists]6.7.2. [endif]创建操作映射注解
--创建一个操作接口,编写一个插入数据的SQL语句
package cn.zj.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import cn.zj.pojo.User;
public interface StudentMapper
{
@Insert(value="INSERT INTO t_user (name, phone, email) VALUES (#{name}, #{phone}, #{email})")
@Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id")
int insert(User user);
}
[if !supportLists]6.7.3. [endif]编写mybatis-config.xml配置文件
在test/resources创建mybatis-config.xml配置文件
[if !vml]
[endif]
--配置文件代码
"1.0"encoding="UTF-8"?>
Config 3.0//EN""mybatis-3-config.dtd">
[if !supportLists]6.7.4. [endif]测试代码
package cn.zj.test;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import cn.zj.mapper.UserMapper;
import cn.zj.pojo.User;
public class UserMapperTest
{
@Test
public void insert(){
try {
//1.获得配置文件
Readerreader= Resources.getResourceAsReader("mybaits-config.xml");
//2.通过SqlSessionFactoryBuilder获得SqlSessionFactory对象
SqlSessionFactoryBuilderbuild=new SqlSessionFactoryBuilder();
//获得会话工厂
SqlSessionFactorysessionFactory = build.build(reader);
//获得会话
SqlSessionsession = sessionFactory.openSession();
//获得操作接口的动态对象
UserMappermapper = session.getMapper(UserMapper.class);
Useruser=new User();
user.setName("王五");
int count = mapper.insert(user);
System.out.println(count);
//提交
session.commit();
session.close();
System.out.println(user.getStuId());
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[if !supportLists]6.8. [endif]第八步:整合SpringMVC与Mybatis
[if !supportLists]6.8.1. [endif]配置支持支持${key}获得Properties文件值
init-method="init"destroy-method="close">
[if !supportLists]6.8.2. [endif]整合Mybatis
[if !supportLists]6.8.3. [endif]配置事物管理器
[if !supportLists]7. [endif]常见问题
问题1:已经下载到本地仓库的jar。Eclipse如何快速加入到Pom.xml文件里面
答:进入POM.xml对应的标签位置,右击选择增加依赖或者插件。
--选择增加的依赖
[if !vml]
[endif]
--选择需要的依赖
[if !vml]
[endif]
问题2:本地明明已经下载了对应的插件或者jar包。但Eclipse工具搜索不出来.
答:原因是缓冲问题。可以清一下仓库索引,操作步骤
--打开Maven仓库管理窗口
[if !vml]
[endif]
--刷新索引缓存
[if !vml]
[endif]
问题3:如何设置默认的JDK版本
问题4:设置打包安装跳过Junit的测试
[if !supportLists]8. [endif]小结
Maven是什么?
Maven是一个项目构建工具
编译--测试-打包-安装完全使用Maven即可完成
Maven完全负责项目依赖包管理
Maven内置集成Tomcat插件
Maven相对手动构建项目优势
Maven有依赖仓库,基本上拥有市面上所有的jar包
更加方便jar包版本管理
互联网各大开源的项目基本都是使用Maven项目构建