新项目开发的通常做法:项目经理从团队抽调1名开发人员进行项目工程框架的搭建,剩余的开发人员先研究项目需求,并着手准备业务逻辑的设计。本地项目工程搭建后,上传SVN或git配置库,告知其他开发人员可以下载项目工程,启动开发了。开发运维人员便进行代码的编写、编译、测试以及打包等系列操作。我们将这一系列的操作称为“构建”。
构建的实质是将我们编写的Java源文件、XML配置文件、HTML页面、CSS和JS文件等,通过某种方式组合在一起,变为可对外服务项目的过程。同时,构建过程中很多都是没有技术含量且重复的工作,手工操作很无趣且太麻烦。最好能够由手工模式转变为自动化模式,这样可以大大节省时间。
构建的工具主要有:
(1). Make;
(2). Ant(Another Neat Tool):另一个整洁的工具;
(3). Maven;
(4). Gradle;
本文将介绍在SDN控制器OpenDaylight中使用的Maven工具。
一、Maven
Maven是Apache组织中一个开源项目,主要用于基于Java平台的项目构建、依赖管理和项目信息管理。下面来看下其几个核心概念:
1.坐标
坐标用于唯一标识构件(如jar,war等),坐标的元素包括groupId、artificatId、version、packaging、classifier,其中前3个是必须定义的,后2个是可选的。
①groupId:定义当前Maven项目隶属的实际项目。
②artificatId:定义实际项目中的一个Maven项目(模块),建议使用实际项目名称作为其前缀。
③version:定义Maven项目当前所处的版本。
④packaging:定义Maven项目的打包方式。
⑤classifier:帮助构建输出的一些附属构件。
2.生命周期
如前所述,软件人员每天的工作:项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等等,Maven对这些工作统一抽象为三个相互独立的生命周期:clean、default和Site。其中,default生命周期的目的是构建项目,而site生命周期的目的是建立项目站点。下面详细说明每种生命周期:
(1).clean生命周期的目的是清理项目,包含三个阶段:
①pre-clean执行一些清理前需要完成的工作;
②clean清理上一次构建生成的文件;
③post-clean执行一些清理后需要完成的工作。
(2).default生命周期的目的是构建项目,定义构建时所需要执行的所有步骤:
其中重要阶段的解释如下:
(3). pre-site的目的是建立项目站点,包含3个阶段:
①site生成项目站点文档;
②post-site执行一些在生成项目站点之后需要完成的工作;
③site-deploy将生成的项目站点发布到服务器上。
需要说明的是,从命令行执行maven任务实质上就是调用Maven的生命周期阶段。例如执行命令mvn clean install,则调用clean生命周期的clean阶段和default生命周期的install阶段,而实际上执行的阶段为clean生命周期的pre-clean、clean阶段,以及default生命周期的从validate至install的所有阶段。
3.插件
在Maven的生命周期中对软件人员的工作进行了抽象,相当于做一个模板,具体的实现则由插件来完成。下面列出default生命周期的内置插件绑定关系及具体任务:
更加详细的内容可以参考Apache Maven官网:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
4.仓库
Maven通过仓库来统一管理文件,同时,为了实现重用,项目构建后生成的构件也安装或部署到仓库中。Maven仓库的分为本地仓库和远程仓库,而远程仓库又包含中央仓库、私服和其他公共库。初始状态下,本地仓库是不存在的,当用户执行Maven命令后,则创建本地仓库,并根据实际需要,从远程仓库下载构件至本地仓库。
(1).本地仓库:一般来说,在Maven项目目录下,没有诸如lib这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要依赖文件,它总是基于坐标使用本地仓库的依赖文件。通过setting.xml文件标识:
D:/repository/
(2).远程仓库:相对本地仓库而言;
(3).中央仓库:是一个默认的远程仓库;包含了大部分的开源JAVA构件以及源码等信息。Maven的安装文件自带了中央仓库的配置。在Maven的安装目录下:$MAVEN_HOME\\lib\\maven-model-builder-3.3.9.jar
central为中央仓库的唯一标识。
(4).私服:是一种特殊的远程仓库,架设在公司内部。当下载构件时,从私服下载,如果私服不存在,则私服请求提供服务。
5.Archetype
意为“原型”,可以理解为Maven项目的模板,以便用户可以快速创建项目,同时针对同类项目保持相同的项目结构及配置约定。Archetype是通过maven-archetype-plugin插件实现,官网链接:
http://maven.apache.org/archetype/maven-archetype-plugin/
三、Maven在OpenDaylight的使用
OpenDaylight使用Maven工具进行项目构建和依赖管理,并在构建简单的简易APP开发一文中对Maven的基础进行介绍,链接如下:
https://docs.opendaylight.org/en/latest/developer-guide/developing-apps-on-the-opendaylight-controller.html
1. 修改settings.xml
为了从远程仓库下载OpenDaylight版本的依赖包,首先需要修改maven的settings.xml,并指定远程仓库的地址。事实上,OpenDaylight提供了预先写好的settings.xml文件,其下载地址为:
https://github.com/opendaylight/odlparent/blob/stable/carbon/settings.xml
https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml
具体内容解释如下:
Maven安装以后,setting.xml文件存在两个地方:
①USR_HOME/.m2/settings.xml,表示当前用户范围的配置文件;
②MAVEN_HOME/conf/settings.xml,表示全局范围配置文件,修改后将影响本机所有的用户配置。
详细的setting文件说明参见链接:
https://maven.apache.org/settings.html。
2. 选择Archetype
Archetype是一个Maven项目模板工具包,使用Archetype来生成项目骨架,可以使得开发人员在开发新的应用程序时,使用与OpenDaylight风格一致的最佳实践方法。
OpenDaylight应用创建的Archetype可通过如下链接查询:
https://nexus.opendaylight.org/#nexus-search;gav~org.opendaylight.archetypes~~~~
执行命令:
通过交互构建hello示例应用,生成的文件视图大致为:
-
JAVA
+关注
关注
19文章
2917浏览量
103369 -
XML
+关注
关注
0文章
184浏览量
32964 -
HTML
+关注
关注
0文章
275浏览量
30709
发布评论请先 登录
相关推荐
![](https://file1.elecfans.com/web2/M00/87/70/wKgaomRmiamAYGjAAAC2e16fCPM553.png)
![](https://file1.elecfans.com/web2/M00/87/70/wKgaomRmiamACZ-3AADdO80ETKY390.png)
![](https://file1.elecfans.com/web2/M00/87/70/wKgZomRmiauAYvmwAACdbVYDvew226.png)
Maven 配置指南
在Linux平台下面安装Maven步骤说明
MyEclipse环境搭建Maven的开发环境
如何从零开始学OpenDaylight
![如何从零开始学<b class='flag-5'>OpenDaylight</b>](https://file.elecfans.com/web2/M00/91/27/pYYBAGPrJEOAQZQpAAEPdyndZQ4660.jpg)
OpenDaylight中的OSGi
![<b class='flag-5'>OpenDaylight</b>中的OSGi](https://file.elecfans.com/web2/M00/90/A9/poYBAGPrMi-AMpr5AACH6bGFhsw751.jpg)
OpenDaylight中的DataStore是什么
![<b class='flag-5'>OpenDaylight</b>中的DataStore是什么](https://file.elecfans.com/web2/M00/91/2E/pYYBAGPrND2AHyGsAABzrj0It2U232.jpg)
如何理解Maven拉包原理,搞定Maven构建项目
![如何理解<b class='flag-5'>Maven</b>拉包原理,搞定<b class='flag-5'>Maven</b>构建项目](https://file1.elecfans.com/web2/M00/88/A9/wKgZomRuv-WAG7a3AAANbp5NkpQ025.jpg)
评论