Maven
为什么需要maven?
- 一个项目就是工程,如果项目非常大,以包管理划分模块不利于管理,最好是一个模块对应一个工程,但模块之间有需要相互访问,所以用maven能很好解决这个问题。
- 项目中需要的jar包要手动复制到项目中,如果项目工程多,那么jar包就要多复制几份粘贴到工程中。借助maven,可以将jar包仅仅地保存到仓库当中,需要时直接引用。
- Jar包需要自己找很麻烦,而下载的方式五花八门。借助maven能以一种规范的方式下载jar包,因为知名的框架或第三方jar工具包都放在maven的中央仓库中。
- 一个jar包依赖的其他jar包需要手动加入项目中。借助maven会自动地增加依赖关系的架包。
是什么?
1,服务于Java平台的自动化构建工具。
Make->ant->maven->gradle
2,构建
以Java源文件,框架配置文件,jsp,html,图片等资源去生产一个可运行的项目的过程。 编译 部署 构建
Tip 工程目录的结构和服务器的结构不同。服务器运行的是webcontent的编译结果,在开发过程中,所以的路径或配置类路径都是以编译结果的目录为标准的。
构建过程中的各个环节
清理 编译 测试 报告 打包 安装 部署
测试 自动测试,自动调用junit程序;报告 测试程序执行的结果;打包 动态web工程打war包,Java工程打jar包
安装 maven特定的概念,将打包得到的文件复制到仓库中。
部署 将动态web工程生产的war包复制到servlet容器的指定目录中,使其可以运行。
安装maven
1 Java的jdk安装 2 解压maven核心程序的压缩包,放在无中文路径下3配置maven相关的环境变量 用户的和系统的。Bin目录的上一级。Path是带bin级
4 运行mvn -v命令,查看版本。
Maven的核心概念
约定的目录结构 POM 坐标 依赖 仓库 生命周期 插件 目标 继承 聚合
约定的目录结构
根目录 与工程同名
Src目录 源码
Pom.xml文件 maven工程的核心配置文件
Main 存放主程序
Test目录 存放测试程序
Java目录 Java文件
Resouces目录 存放框架和其他工具的配置文件
自定义的东西要想让框架或工具知道
要以配置的方法明确告诉框架 或者遵守约定。
--根目录
--|--src
--|--|--main
--|--|--|--java
--|--|--|--resource
--|--|--test
--|--|--|--java
--|--|--|--resource
--|--pom.xml
常用的maven目录
1注意 执行与构建过程相关的maven命令,必须进入pom.xml所在的目录。 与构建相关的命令 编译 测试 打包……
常用命令
以mvn开头
清理clear compile编译主程序 test-compile编译测试程序 test执行测试 package打包
联网
Maven的核心程序仅仅定义了抽象的生命周期,但是具体的工作有插件完成,并不包含在maven的核心程序中。
会先在本地仓库查找,本地仓库的默认位置
C:\user\当前登录系统的用户\.m2\repository
如果没有找到,会联网去中央仓库下载,如果没有网络,会构建失败。
修改默认的本地仓库的位置 让maven核心程序去那里查找。
Maven的解压目录 conf\setting配置文件
找到localrepository标签,修改标签的内容。
POM project object model项目对象模型
与pom.xml文件的配置相关。
坐标
使用三个向量在仓库中唯一定位一个maven工程。
groupid工程名artifactid模块名version版本
maven工程的坐标和仓库中的路径一致。
仓库
本地仓库
远程仓库 1局域网范围 或私服2中央仓库3 中央仓库的镜像
仓库保存的内容 maven工程
1maven自身的插件 2 第三方框架或工具的jar包 3自己开发的maven工程。
依赖
dependency
Maven解析依赖信息时去本地仓库里去找,如果没有则依赖失败。
对于我们自己构建的maven工程,需要在控制端进入工程目录下,执行mvn install命令后,自动地收入本地仓库。
工程依赖另一个工程 需要在pom.xml配置文件中配置
首先添加总标签dependencies, 在标签下建立dependency标签,配置工程依赖。
而dependency标签下应该有工程的坐标信息,还有依赖的范围标签。
及scope的范围
Compile 对主程序有效 对测试程序有效 对打包有效
Test 对测试程序有效 不参与打包
Provided 在开发工程中比较 对主程序 测试程序有效 不参与打包,也就是不参与部署。
生命周期 各个构建的执行次序
清理 编译 测试 报告 打包 安装 部署
插件和插件目标
生命周期的各个阶段仅仅定义了要执行什么
各个阶段和插件的目标是对象的
插件执行的工具
MyEclipse设置maven插件
1installations 指定maven的核心程序的位置,推荐不用
2user setting 指定conf/setting的位置,也就是本地仓库的位置。
基本操作
创建maven版的Java/web工程
设置maven版本的jdk版本,
在eclipse执行命令 在run as中执行
Java工程和Web工程的区别 打包的方式 jar war
Web工程的修改 点右键 project facets的选项,操作。
依赖的传递性
如果某个工程里依赖其他的架包,那么在引入它的工程也会间接依赖这个引入工程的架包。
注意 非compile范围的依赖不能传递。
依赖的排除 及消除多余的间接依赖
依赖排除的设置
在添加依赖的工程中,exclusions标签中增加 exclusion标签里添加排除架包的坐标。
依赖的原则 解决模块工程之间的jar包冲突问题。
工程之间通过依赖传递引入相同不同版本的架包,根据路径最小者优先,而路径相同时,根据工程声明的顺序优先。
同一管理依赖的版本
升级架包的版本的方式
1使用properties标签,在标签里面自定义一个版本标签
2然后再version标签中使用${自定义的标签}
3这种方式不单单仅仅用于此,还可以用于其他用途。
继承
需求 统一管理各个模块工程junit依赖的版本
引用test范围的不能通过传递,所以必然会分散在各个模块工程中,容易造成版本不一致。
解决方式 将junit依赖同一提取到父工程中,在子工程中声明junit依赖时布置的版本后,以父工程的设定为准。
1创建一个maven工程为父工程,注意打包的方式pom
2将子工程的坐标与父工程相同的依赖消除
3在父工程中统一管理junit的版本
4子工程删除junit的版本。
5配置工程前,先安装父工程
子工程声明父工程
用dependencies中用parent标签声明父工程,而不用dependency标签,最好配置一个相对路径标签。
relativePath以当前文件为基准的父工程pom.xml文件的相对路径。
聚合
如果一个工程依赖其他的工程,但其他的工程没有安装,就要先一个一个安装其他工程,会很麻烦,所以可以通过聚合一键安装。
在一个总的工程配置聚合,及父工程中设置聚合。
添加modules标签,在其中设置module标签,及子工程的相对路径,父工程执行安装命令。
Deploy命令 部署到服务器 或者远程服务器上,运行。
执行前必须先执行打包命令,再执行部署命令。
自动部署
Build标签 配置当前工程构建中的特殊配置
finalName
plugins
plugin标签中添加cargo,专门启动servlet容器
configuration当前容器的配置
container
containerId tomcat的名字
home
type tomcat的状态
home tomcat的位置
properties 配置端口
executions配置插件在什么情况下执行。
Phase生命周期install
Goal插件的目标
在命令行执行 deploy
#1
设置tomcat权限
在conf目录下,找到tomcat-users.xml,添加用户
<role rolename="manager"/>
<user username="tomcat" password="123456" roles="manager"/>
#2 配置maven
conf目录下的setting.xml文件,在<servers>节点中添加tomcat下配置的用户信息 id可以任意
<server>
<id>tomcat7</id>
<username>tomcat</username>
<password>123456</password>
</server>
#3 项目的pom.xml设置
在Web项目的pom.xml文件的<plugins>节点中,添加tomcat的maven插件,
<build>
<!-- 设置war包名称 -->
<finalName>${finalName}</finalName>
<plugins>
<!-- tomcat自动部署插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<url>http://localhost:8080/manager</url>
<username>tomcat</username>
<password>123456</password>
<path>/${finalName}</path>
</configuration>
</plugin>
</plugins>
</build>
Mavne查找依赖的方法
maven 你需的jar包名称 repository
比如我要做EJB,我要找jboss-j2ee.jar的Dependency
就在GOOGLE里输入
maven jboss-j2ee repository
在结果的第一条,进去你就可以在页面里找到下面这段
<dependency>
<groupId>jboss</groupId>
<artifactId>jboss-j2ee</artifactId>
<version>4.0.2</version>
</dependency>
网站查找https://mvnrepository.com/
搜索相关的包
测试
用assertequal(预期的结果,测试的结果)
如果不相等抛出异常