为什么要用maven
1、都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行?
2、为什么在我的机器上可以正常打包,而配置管理员却打不出来?
3、项目组加入了新的人员,我要给他说明编译环境如何设置,但是让我挠头的是,有些细节我也记不清楚了。
4、我的项目依赖一些jar包,我应该把他们放哪里?放源码库里?
5、这是我开发的第二个项目,还是需要上面的那些jar包,再把它们复制到我当前项目的svn库里吧
6、现在是第三次,再复制一次吧 ----- 这样真的好吗?
7、我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组
-----这不是一个好的分发机制,太多的环节可能导致出现bug
8、项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署,太麻烦了。
什么是maven
Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的工具。
Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上
Maven主要有两大功能:管理依赖、项目构建。
依赖指的就是jar包。
安装
下载 解压 配置环境变量
测试maven是否安装成功,在系统命令行中执行命令:mvn –v
设置局部配置文件 settings.xml 用户仓库的配置 repository
eclipse 插件复制到dropins里 在eclipse的Maven设置里设置安装目录,settings.xml 用户仓库为settings.xml里设置
命令
compile 编译 clean 删除target目录 test 完成单元测试 package 打包,jar/war
install 完成将打好的jar包放到本地仓库,方便其它工程引用
clean 可与上面的组合使用
生命周期
三个 Clean Lifecycle 构建之前的清理操作;
Default Lifecycle;核心 编译,测试,打包,部署
Site Lifecycle 生成项目报告,站点,发布站点
声明周期中一个的步骤执行时一定会执行比他早的步骤 例如install执行时,会执行compile test package
创建
创建maven工程
next(可创建简单工程) next
进入New Maven Project界面
Group id 组织名,公司名 Artifact id 工程名,项目名 Version 版本信息 package 工程中的包名 可不填
如果在第一个选择界面的上面打勾 可以在下面选择继承的父类 jar为普通项目 war为web项目 pom作为父类和聚合类时选择
重点文件 pom.xml
maven核心概念
坐标
groupId:定义当前Maven组织名称
artifactId:定义实际项目名称
version: 定义当前项目的当前版本
依赖 <dependens>标签 三个重要标签 g a v g a为jar包名称 v为版本号
也可依赖其它maven项目 同样的标签 g a v 分别对应依赖maven项目的 g a v ctrl可点进去
依赖可多重依赖 , 按照就近原则依赖 optional默认为false 为true时不向下传递
exclusions两个子标签 g a 排除远程依赖 g a 分别为要排除依赖maven的 g a
插件 <build><plugins><plugin> g a <configuration> 具体的其它标签
插件可以使编译环境改为jdk7 tomcat改为7 运行时为tomcat7:run
继承 消除重复,把相同配置提取出来 父工程统一管理版本号
父类提供规范 并没有其它东西 只有pom.xml 构建项目时选择在 jar war pom中选择pom
子类两种方式继承 新项目可在构建时的下面继承,旧项目在pom.xml上面添加一个<parent>节点 并填写g a v
父类的pom.xml中的<dependens>所依赖的jar包等子类会直接继承
如果是<dependenceManager> 子类不会直接依赖 需要自己写<dependence>节点 但是只需要写 g a不需要v v为父 类所填写
父类依赖中的gav v的值可以提出来 作<properties>节点 子标签名随意命名,如<a.version>值为版本号
取值时在v的值里填写${a.version}就行
聚合 创建maven项目 选择pom (可继承父工程)并选中创建持久层 业务层 表现层
穿件项目时选择maven model 不是project 持久层,业务层可以直接确认
表现层需要next后在jar war pom中选择war