博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven3 快速入门
阅读量:6544 次
发布时间:2019-06-24

本文共 17311 字,大约阅读时间需要 57 分钟。

Maven3 快速入门

Maven 是目前大型项目构建的必备知识。本章会通过介绍 Maven 的作用,Maven 的基本语法,以及搭建企业级项目架构来快速入门 Maven 。前两部分是理论知识只需要了解,第三部分是实战操作,请把重心和精力放在最后。

 

1 为什么用 Maven

一个基本web项目是从 视图层(H5,CSS,Js等前端技术) 到 控制层(SpringMVC,Struts2) 到 事务处理层(Spring IOC,AOP) 再到 持久层(SpringData,Hibernate,Mybatis) 最后到 数据库(Mysql,Oracle,Mongodb等) 。咦!!!好像没有Maven什么事?

但我们试想:

① 如果给一个项目添加 jar 包,我们是不是手动COPY到WEB-INF/lib 目录下的?

② 如果 jar 包之间发生依赖问题和版本冲突,我们是不是抓耳挠腮,45度仰望天空,怀疑人生?

③ 如果项目多了,相同 jar 包占用的存储空间会越来越大,我们是不是要犯强迫症了?

...... 怎么解决?

① 其实我们可以借助Maven,使其以一种规范的方式下载设置的jar包(减少我们手动 COPY 的过程),

② 值得疯狂的是:Maven 在下载jar包的同时,还会自动将被依赖的jar导入(减少我们解决 jar 包依赖的精力),

③ 我们可以设置一个Maven pom 父项目来管理jar包,让其他项目继承它(减少 jar 包冗余占用存储空间的问题)

当项目越来越复杂,规模越来越大的时候,Maven的作用就会越来越明显!!!

Maven 是一款服务于 Java 平台用的自动化构建工具,同时它也是用 Java 编写的。

构建的流程主要分为七个步骤:

① 清理:删除之前编译的文件(如 .class 文件)

② 编译:将 .java 文件转化成 JVM 可读的 .class 文件

③ 测试:对一些核心关键方法进行测试

④ 报告:对测试结果进行报告,如:运行了几个测试方法,失败了几个,跳过了几个

⑤ 打包:若测试失败,则打包也会失败。普通的 Java 项目是打包成 jar 包,而 web 项目则是 war 包

⑥ 安装:将打好的包,安装到本地仓库中

⑦ 部署:将打好的包,部署到服务器上运行

 

2 Maven 基础语法

Maven 之所以能实现自动化构建。和以下几个基本要素密不可分:① pom.xml 文件 ; ② 项目结构; ③ 坐标;④ 依赖管理;⑤ 仓库管理;⑥ 生命周期;⑦ 插件和目标; ⑧ 继承和聚合

2.1 pom.xml 文件

pom 的全称是 Project Object Model (项目对象模型),pom.xml 是 Maven 项目的核心文件,jar包的依赖管理,坐标的定义,插件的设置都在该文件中。

2.2 项目结构

如果你的项目结构不是按照 Maven 的要求来。就不会实现自动化构建的。其项目结构如下:

根目录  // 项目名|---src // 源码|---|---main  // 主程序|---|---|---java  // 主程序Java 源码|---|---|---resources // 主程序资源文件|---|---test  // 测试程序|---|---|---java|---|---|---resources|---pom.xml  // Maven 项目核心配置文件

2.3 坐标

Maven 通过三个参数(groupId, artifactId, version)来确定唯一的 Maven 项目

groupId:组名,一般是 域名 + 公司/组织名 + 项目名

com.itdragon

artifactId:模块名

itdragon-parent

version:版本号

0.0.1-SNAPSHOT

2.4 依赖管理

compile 范围依赖: 对主程序 和 测试程序都有效,参加打包和部署

test 范围依赖: 只对测试程序有效,不参与打包和部署

provided 范围依赖: 对主程序 和 测试程序都有效,不参与打包和部署

2.5 仓库管理

Maven 仓库分两类:一是本地仓库;另外一个是远程仓库。

本地仓库:默认路径是 用户/.m2/repository

远程仓库:需要联网,可以直接去中央仓库下载,如果嫌慢还可以考虑中央仓库的镜像,也可以在局域网内配置私服 Nexus 。

私服 Nexus 的工作原理:因为在局域网内访问的速度远比访问外网要快。如果在一台机器上下载好 jar 包,其他同事则可以通过局域网高速下载该机器上的jar 包。若私服 Nexus 里面也没有,则会先去外网下载到私服 Nexus 上。有点类似把资源下载到自己电脑上,其他人用U盘开拷贝。

本地仓库中不仅有第三方的 jar 包,我们还可以将项目(jar / war)打包到仓库中

2.6 生命周期

Maven 生命周期定义了各个构建环节执行的先后顺序。只有这样,Maven才能正常完成自动化构建的功能。(大致了解即可) 

2.7 插件和目标

① Maven 的核心仅仅是定义了抽象的生命周期,具体任务都是交给插件来完成

② 每个插件都可以实现多个功能,每个功能就是一个插件目标

③ Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务

2.8 继承和聚合

继承:为了很好的管理 jar 包,和解决 jar 包冗余问题。会创建一个 pom 的父项目,其他系统继承该父项目。

聚合:如果每个项目打包很麻烦,我们可以创建一个聚合项目,来批量执行 Maven 的命令。具体操作看第四部分 搭建企业级项目

itdragon-manager-pojo
itdragon-manager-mapper
itdragon-manager-service
itdragon-manager-web

 

3 搭建企业级项目

需求:通过整合 SSM 框架查询Mysql数据

技术:Spring , SpringMVC , Mybatis三大框架的整合,Druid 连接池连接 Mysql 数据库

环境:jdk1.8 , ide 是 sts(sts 使用和eclipse 几乎一样,笔者因为学习spring cloud 时换成了sts,有点吃内存)

步骤:① 搭建管理 jar 包的 itdragon-parent 项目;② 搭建公共方法的 itdragon-common 项目;③ 搭建模块开发的 itdragon-manager 项目;④ 创建四个模块项目 (pojo,mapper,service,web)

源码:  先maven install itdragon-parent 项目,然后是 itdragon-common 项目,最后是 maven build...(clean tomcat7:run) itdragon-manager 项目

结构:

① 搭建管理 jar 包的 itdragon-parent 项目

第一步:创建一个 pom 项目 itdragon-parent ,该项目管理 jar 包的版本

 第二步:修改 pom.xml 文件,配置 jar 的版本和插件

4.0.0
com.itdragon
itdragon-parent
0.0.1-SNAPSHOT
pom
4.12
4.1.3.RELEASE
3.2.8
1.2.2
1.2.15
5.1.6
1.6.4
2.4.2
1.0.9
1.2
2.5
2.0
3.3.2
1.3.2
3.3
org.apache.commons
commons-lang3
${commons-lang3.version}
org.apache.commons
commons-io
${commons-io.version}
commons-net
commons-net
${commons-net.version}
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
junit
junit
${junit.version}
test
org.slf4j
slf4j-log4j12
${slf4j.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
com.github.miemiedev
mybatis-paginator
${mybatis.paginator.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-aspects
${spring.version}
jstl
jstl
${jstl.version}
javax.servlet
servlet-api
${servlet-api.version}
provided
javax.servlet
jsp-api
${jsp-api.version}
provided
${project.artifactId}
org.apache.maven.plugins
maven-compiler-plugin
3.2
1.8
1.8
UTF-8
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2

② 搭建公共方法的 itdragon-common 项目

第一步:创建一个 common 项目 itdragon-common ,该项目是一个 Java 项目,存放一下项目常用的工具类

③ 搭建模块开发的 itdragon-manager 项目

第一步:创建一个 pom 聚合工程, itdragon-manager

④ 创建四个模块项目 (pojo,mapper,service,web)

创建一个 itdragon-manager-pojo 项目,管理项目实体类模块。 新增 Maven Model项目

 

 第一步:通过 Mybatis 的逆向工程生成 Person.java 和 PersonExample.java(因为是自动生产的而且太长了,这里就不贴出来了)。 pom.xml 不用修改。

package com.itdragon.pojo;public class Person {    private Integer id;    private String email;    private String lastName;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email == null ? null : email.trim();    }    public String getLastName() {        return lastName;    }    public void setLastName(String lastName) {        this.lastName = lastName == null ? null : lastName.trim();    }}

PersonExample.java : 

创建一个 itdragon-manager-mapper 项目,管理项目 Dao 模块 。创建方法同上。

第一步:通过 Mybatis 逆向工程生成 PersonMapper.java 和 PersonMapper.xml(因为是自动生产的而且太长了,这里就不贴出来了)

package com.itdragon.mapper;import com.itdragon.pojo.Person;import com.itdragon.pojo.PersonExample;import java.util.List;import org.apache.ibatis.annotations.Param;public interface PersonMapper {    int countByExample(PersonExample example);    int deleteByExample(PersonExample example);    int deleteByPrimaryKey(Integer id);    int insert(Person record);    int insertSelective(Person record);    List
selectByExample(PersonExample example); Person selectByPrimaryKey(Integer id); int updateByExampleSelective(@Param("record") Person record, @Param("example") PersonExample example); int updateByExample(@Param("record") Person record, @Param("example") PersonExample example); int updateByPrimaryKeySelective(Person record); int updateByPrimaryKey(Person record);}

PersonMapper.xml:

第二步:修改 pom.xml 文件。

4.0.0
com.itdragon
itdragon-manager
0.0.1-SNAPSHOT
itdragon-manager-mapper
com.itdragon
itdragon-manager-pojo
0.0.1-SNAPSHOT
org.mybatis
mybatis
org.mybatis
mybatis-spring
com.github.miemiedev
mybatis-paginator
mysql
mysql-connector-java
com.alibaba
druid

创建一个 itdragon-manager-service 项目。进行事务的管理,创建方法和上面一样。

第一步:创建 PersonService.java 和 PersonServiceImpl.java

package com.itdragon.service;import com.itdragon.pojo.Person;public interface PersonService {        Person findOneById(Integer id);}
package com.itdragon.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.itdragon.mapper.PersonMapper;import com.itdragon.pojo.Person;import com.itdragon.service.PersonService;@Servicepublic class PersonServiceImpl implements PersonService {        @Autowired    private PersonMapper personMapper;    @Override    public Person findOneById(Integer id) {        return personMapper.selectByPrimaryKey(id);    }}

第二步:修改 pom.xml 文件

4.0.0
com.itdragon
itdragon-manager
0.0.1-SNAPSHOT
itdragon-manager-service
com.itdragon
itdragon-manager-mapper
0.0.1-SNAPSHOT
org.springframework
spring-context
org.springframework
spring-beans
org.springframework
spring-webmvc
org.springframework
spring-jdbc
org.springframework
spring-aspects

创建一个 itdragon-manager-web 项目。这里整合 Spring , SpringMVC, Mybatis 

第一步:创建 Maven 的 web 项目 (很重要)

① 创建一个 Maven Project 项目,选择 war 包

② 右击项目,选择 properties ,选择 Project Facets

③ 取消 Dynamic Web Model ,然后点击 Apply ,然后选择 Dynamic Web Model,最后点击 Further configuration available...

④ 设置 web.xml 的目录

 第二步:整合 Spring ,SpringMVC,Mybatis

SqlMapConfig.xml ,mybatis 配置文件

db.properties,数据库配置文件

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/jpa?characterEncoding=utf-8jdbc.username=rootjdbc.password=root

applicationContext-dao.xml

applicationContext-service.xml

applicationContext-trans.xml

springmvc.xml

web.xml

itdragon-manager
contextConfigLocation
classpath:spring/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
itdragon-manager
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/springmvc.xml
1
itdragon-manager
/

运行:右击 itdragon-manager 项目,选择run as ,选择 maven build... ,输入 clean tomcat7:run 即可 

效果图:项目构建的日志信息这里就不贴出来了,内容已经很长了。

 

4 总结

① 介绍了 Maven 是如何辅助 Java 项目开发,能帮助我们高效高质地完成开发。

② 介绍了 Maven 的基础语法如,如Maven 的坐标,继承,依赖,聚合,等都是常用语法。

③ 介绍了 整合 SSM 框架中 Maven 起到的作用。

 

到这里Maven的入门就结束了,笔者还会有很多Java 相关的技术博客,希望大家能关注我。如果有什么不对的地方,请指正!

转载地址:http://usodo.baihongyu.com/

你可能感兴趣的文章
Javascript:必须知道的Javascript知识点
查看>>
是不是服务器配置越牛X重启时间就越短?
查看>>
Android手机无法使用debug解决方法
查看>>
电脑快捷键
查看>>
oracle 11g jdbc jar包在哪个文件目录
查看>>
新款macbook安装 和 驱动Boot Camp
查看>>
大于2GB的Listener.log和运行超过198天的主机上的Oracle实例
查看>>
异常:HRESULT: 0x80070057 (E_INVALIDARG)解决方案
查看>>
php常用函数
查看>>
参数化查询为什么能够防止SQL注入
查看>>
Google Protocol Buffers 概述
查看>>
GUID-1
查看>>
跨域共享Cookie ,单点登录,二级域名登录共享
查看>>
FusionCharts的使用方法
查看>>
从文件或摄像机读
查看>>
批量修改Project视图中Prefab的名字
查看>>
requestAnimationFrame,Web中写动画的另一种选择
查看>>
js实现按回车自行提交
查看>>
ASP.NET Web API标准的“管道式”设计
查看>>
php curl常见错误:SSL错误、bool(false)
查看>>