Maven简介
是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的
Maven好处
普通的传统项目
图片.png
Maven项目
图片.png
依赖管理
need-to-insert-img
图片.png
Maven的好处
依赖管理:就是对项目依赖的jar包的统一管理 可以节省空间
一键构建
可以跨平台
应用于大型项目 可以提高开发效率
Maven构建
下载安装
need-to-insert-img
图片.png
maven的核心文件 maven/apache-maven-3.5.4/conf/settings.xml
need-to-insert-img
核心文件
Maven的三种仓库
本地仓库 自己维护
配置本地仓库需要修改setting.xml文件
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository 默认本地仓库
<localRepository>/path/to/local/repo</localRepository>
-->> default 默认的本地仓库
远程仓库 公司维护
中央仓库 maven团队维护
Maven的目录结构
need-to-insert-img
maven项目目录结构
need-to-insert-img
Maven的目录结构
Maven的常用命令
clean清理
clean是maven工程的清理命令,执行clean会删除target目录的内容
need-to-insert-img
clean命令
Compile
Compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下
need-to-insert-img
图片.png
Test
test是maven工程的测试命令,会执行src/test/java下的单元测试类
need-to-insert-img
图片.png
package
package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包
need-to-insert-img
图片.png
install 将项目发布到本地仓库
install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库
对于web工程 发布到本地仓库并没有任何作用
need-to-insert-img
install
Tomcat:run 一键启动
site 生成对应的工程说明
Maven的生命周期
compile test package install
执行install的时候 compile test package都会执行
need-to-insert-img
图片.png
clean的生命周期
maven对项目构建过程分为三套相互独立的生命周期。
CleanLifecycle 在进行真正的构建之前进行一些清理工作
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等
SiteLifecycle 生成项目报告,站点 发布站点
need-to-insert-img
各阶段生命周期
不同的生命周期命令可以同时执行
mvn cleanpackage
构建Maven项目 IDE:Intelij idea
创建项目
need-to-insert-img
创建项目
选择maven
need-to-insert-img
选择maven
填写项目信息
need-to-insert-img
图片.png
添加tomcat插件
增加war打包
need-to-insert-img
图片.png
添加web目录 注意 这个目录在main/webapp/
need-to-insert-img
创建web目录
创建web资源目录
need-to-insert-img
web资源
在pom.xml添加tomcat插件
need-to-insert-img
pom.xml配置
项目启动配置
编辑配置
need-to-insert-img
编辑配置
添加+ 选择maven
need-to-insert-img
图片.png
配置maven命令
need-to-insert-img
配置maven命令
配置maven仓库
need-to-insert-img
配置maven仓库
在webapp下添加index.html
need-to-insert-img
图片.png
启动项目
need-to-insert-img
图片.png
need-to-insert-img
图片.png
参考大神文章:https://my.oschina.net/u/2935623/blog/1803198
maven坐标定义
每个maven工程都需要定义本工程的坐标,坐标是maven对jar包身份定义:
<!--项目名称,定义为组织名+项目名 类似包名-->cn.probuing.maven<!--模块名称-->maven_tx<!--当前项目版本号-->1.0-SNAPSHOT<!--打包类型-->war* jar:执行package会打成jar包 * war:执行package会打成war包 * pom:用于maven工程的集成,通常父工程设置为pom
maven与Struts2整合
使用struts2与maven传递一个客户id 跳转页面
创建项目
need-to-insert-img
创建项目
设置packaging 为war
<?xml version="1.0"encoding="UTF-8"?>4.0.0cn.probuing.crmmavenProj1.0-SNAPSHOTwar
添加web目录
need-to-insert-img
图片.png
添加tomcat插件
org.apache.tomcat.maventomcat7-maven-plugin2.28080/mavssh
添加依赖 管理jar包
<!--依赖管理-->org.apache.strutsstruts2-core2.3.24javax.servletjsp-api2.0providedjavax.servletservlet-api2.5providedjunitjunit4.10
为避免包冲突,添加servlet-api.jar和jsp-api.jar 注意选择scope为provided
配置struts2
struts.xml src/main/resources/
<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"><!-- 配置常量 --><!-- 字符集 --><!-- 开发模式 --><!-- 主题 --><!-- 扩展名 --><!-- 通用package -->/info.jsp
web.xml 核心过滤器
struts2org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterstruts2/*
编写action
publicclassCutomerActionextendsActionSupport{privateLong custId;publicLonggetCustId(){returncustId; }publicvoidsetCustId(Long custId){this.custId = custId; }publicStringfindById(){returnSUCCESS; }}
jsp
<%@ page contentType="text/html;charset=UTF-8"language="java"%>TitleHello Every body it's from maven
依赖范围
Compile
编译时需要,测试时需要,运行时需要,打包时需要
Provided
编译时需要,测试时需要,运行时不需要,打包时不需要
Runtime
编译时不需要,测试时需要,运行时需要,打包时需要
Test
编译时不需要,测试时需要,运行时不需要,打包也不需要
整合框架时依赖冲突的解决
在我们整合框架的时候,在集成了多个框架的时候可能会出现依赖冲突的情况,我们解决依赖冲突主要有以下几个方式
第一声明优先原则
优先声明的会先进行配置,如下配置中Maven会集成spring-beans-4.2.4的依赖库
<!-- spring-beans-4.2.4 -->org.springframeworkspring-context4.2.4.RELEASE<!-- spring-beans-3.0.5 -->org.apache.strutsstruts2-spring-plugin2.3.24
路径优先原则
自己指定jar包
org.springframeworkspring-beans4.2.4.RELEASE
添加排除
使用标签可以指定排除冲突的库
org.apache.strutsstruts2-spring-plugin2.3.24org.springframeworkspring-beans
版本锁定原则
<!--定义变量配置-->4.2.4.RELEASE5.0.7.Final2.3.24<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->org.springframeworkspring-context${spring.version}
分模块开发
依赖传递
依赖传递
依赖关系
父工程
模块工程
依赖模块工程的模块工程
在这里需要注意的是 对于有些工程 定义的 依赖的生命周期为scope为test的依赖,需要手动添加到依赖中
作者:So_ProbuING
链接://www.greatytc.com/p/6befb7cf32f8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。