重要知识点介绍:
1、 什么是Maven
2、 Maven快速入门及eclipse的maven插件配置和使用
3、详解pom.xml及如何添加依赖
4、 构建多模块项目
5、 生命周期和常用插件(重难点)
6、构建Profile和项目移植
7、搭建私服(了解)
什么是Maven
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段中插件目标的逻辑。
Maven核心思想: 约定优于配置 (来自敏捷开发思想 )
Maven工具管理项目的完整生命周期如下图:
Maven安装及eclipse插件配置
- 下载Maven: http://maven.apache.org/
- 了解Maven目录结构
- 配置Maven环境变量
- 查看Maven环境变量是否配置成功:
执行命令:mvn -v
- 修改/config/setting.xml配置文件用以配置本地仓库
打开setting.xml编辑如下:
- 常见Maven名词
Project:任何您想build的事物,Maven都可以认为它们是工程。这些工程被定义为工程对象模型(POM,Poject Object Model)。一个工程可以依赖其它的工程;一个工程也可以由多个子工程构成。
POM:POM(pom.xml)是Maven的核心文件,它是指示Maven如何工作的元数据文件。POM文件位于每个工程的根目录中。
GroupId:groupId是一个工程的在全局中唯一的标识符,一般地,它就是工程名。groupId有利于使用一个完全的包名,将一个工程从其它有类似名称的工程里区别出来。
Artifact:artifact 是工程将要产生或需要使用的文件,它可以是 jar 文件,源文件,二 进制文件, war 文件,甚至是 pom 文件。每个 artifact 都由 groupId 和 artifactId 组合的标识符唯一识别。 需要被使用 ( 依赖 ) 的 artifact 都要放在仓库 ( 见 Repository) 中,否则 Maven无法找到 ( 识别 ) 它们。
Dependency : 为了能够build或运行,一个典型的Java工程会依赖其它的包。在Maven中,这些被依赖的包就被称为dependency。dependency一般是其它工程的artifact。
Plug-in:Maven是由插件组织的,它的每一个功能都是由插件提供的。插件提供goal(类似于Ant中的target),并根据在POM中找到的元数据去完成工作。主要的Maven插件要是由Java写成的,但它也支持用Beanshell或Ant脚本写成的插件。
Repository:仓库。
- eclipse集成maven插件
个人推荐方式是百度搜索下载插件,简单粗暴!!!
解压缩插件查看如下:
先关闭eclipse,将对应文件夹下的内容放到eclipse的安装目录下的对应文件夹里,再重启eclispe
- 配置maven步骤:
Ⅰ、勾选下图两个选项,方便查看所添加依赖jar的源码
Ⅱ、设置本地maven安装目录
Ⅲ、设置settings.xml位置
切记:修改settings.xml 等同于修改本地仓库位置 , 一定要点击 update sessions 按钮!!!
使用eclipse新建Maven项目
File--->New--->Maven Project
Packaging类型选jar代表是普通Java工程,选war代表Web工程
点击Finish,查看新建的Java项目,如果是Web项目则需要在src/main/webapp下建立 WEB-INF/web.xml
src/main/java 存放源码
src/main/resources 存放配置文件
src/test/java 存放测试源码
src/test/resources 存放测试配置文件
src/main/webapp 存放web资源
通过m2eclipse插件执行常用maven命令
点击Maven build 弹出如下界面在Goals一栏配置相关命令,可自行百度!!!
详解pom.xml
- 通过坐标标识项目的唯一位置
<groupId>:创建项目的组id
<artifactld>:项目的唯一id,可视为项目名
<version>:产品的版本号
安装到仓库路径
repository\cn\leepon\maven\SimpleDemo\0.0.1-SNAPSHOT
位置 : groupId/artifactId/version/war包、jar包
- 通过坐标,添加依赖
方案一:对本地仓库建立索引,直接从本地仓库搜索
点击eclipse的window选项------>Show View------>other,输入maven查看本地仓库
对本地仓库重新建立索引
打开pom.xml右击添加相关jar包依赖和插件
方案二:通过网络搜索 http://mvnrepository.com/
构建多模块项目
一个多模块项目通过一个父POM引用一个或多个子模块来定义
新建三个maven项目,分别为simple-parent项目、simple-weather模块、simple-webapp模块
在simple-parent项目的pom里通过<modules></modules>集成子模块
Maven build父模块的时候,会自动build子模块,父模块的packaging必须为POM!!!
生命周期和常用插件介绍(重难点)
生命周期介绍:
- 三套生命周期(clean、default、site)相互独立
- 一套生命周期,生命周期阶段前后依赖
- maven命令指向生命周期阶段
Maven本身是一个框架,实际的任务都由插件完成 ,插件与生命周期阶段绑定,用户通过指定生命周期阶段就能够隐式的通过插件执行任务 ,打包类型(packaging)控制default生命周期与插件目标(plugin goal)的绑定。
Maven编译插件:
命令:mvn compile
Tomcat插件:
命令:mvn tomcat:run
动态打包插件:
命令: mvn package
构建profile实现多环境可移植
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,是个很麻烦的事情。有没有一种方法能够让我们不用修改配置就能发布到不同的环境中呢?当然有,这就是接下来要做的事。
当然,这里的前提是使用maven做为构建工具。
使用maven来实现多环境的构建可移植性,需要借助maven提供的profile功能,通过不同的环境激活不同的profile来达到构建的可移植性。
一、配置profile
首先是profile配置,在pom.xml中添加如下profile的配置:
这里定义了三个环境,分别是development(开发环境)、test(测试环境)、production(生产环境),其中开发环境是默认激活的(activeByDefault为true),这样如果在不指定profile时默认是开发环境。
profiles.active表示被激活的profile的名称,deploy.url表示发布服务器的地址。
注明:host和port分别是发布服务器的主机地址和端口号。
二、配置文件
针对不同的环境,我们定义不同的配置文件,而这些配置文件都做为资源文件放到maven工程的resources目录下,即src/main/resources目录下,且各个环境的配置分别放到相应的目录下,而所有环境都公用的配置,直接放到src/main/resources目录下即可。
如下图所示:
如图所示,开发环境、测试环境、生产环境的配置文件分别放到src/main/resources目录下的development、test、production三个子目录中,而所有环境都公用的配置文件spring-applicationContext.xml直接放到src/main/resources目录下。
三、maven资源插件配置
在pom中的build节点下,配置资源文件的位置,如下所示:
四、配置tomcat-maven-plugin插件
其中发布的<url>节点就是在前面profile中配置的deploy.url属性,这样不同的环境就指定了不同的发布地址。<server>和<path>节点分别是发布服务器的用户配置的id以及应用的context名称。
五、构建或发布
通过在运行maven命令时指定不同的profile即可构建不同环境需要的war包或发布到不同的环境了 。如:
mvn clean package -Pproduction 即构建出生产环境需要的war包
mvn tomcat:redeploy -Ptest 即发布到测试环境
搭建私服
- 官网下载nexus:
下载war格式 : nexus-2.7.0-06.war (直接放入tomat运行)
访问: http://localhost:8080/nexus-2.7.0-06/index.html#welcome
账户: admin 密码 admin123
登录后可在左边菜单栏配置
- 配置代理服务器
在Administration下的Server里配置
- 配置repository
在View/Repositories下的Resposities里进行配置
nexus里可以配置3种类型的仓库,分别是proxy、hosted、group
proxy是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用。
hosted是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。
group是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了。
- 配置Central Repository的proxy
需要做的就是把Download Remote Indexes改为true,这样nexus才会从central repository下载索引,才能在nexus中使用artifact search的功能 。
- 配置hosted repository
一般会配置3个hosted repository,分别是3rd party、Snapshots、Releases,分别用来保存第三方jar、项目组内部的快照、项目组内部的发布版 。
这里并没有什么特别的配置,只是Deployment Policy这个选项,一般Snapshots会配置成允许,而Releases和3rd party会设置为禁止 !!!
- 配置group repository
group其实是一个虚拟的仓库,通过对实体仓库(proxy、hosted)进行聚合,对外暴露一个统一的地址。
注意:放置左边的仓库才会被聚合!!!
- 配置用户密码 在Security–>Users中配置
- 在用户机器上的maven安装目录下找到config文件夹,配置settings.xml
- 修改项目pom.xml