什么是OpenDaylight的Maven

描述

新项目开发的通常做法:项目经理从团队抽调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生命周期的目的是构建项目,定义构建时所需要执行的所有步骤:

JAVA

其中重要阶段的解释如下:

JAVA

(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生命周期的内置插件绑定关系及具体任务:

JAVA

更加详细的内容可以参考Apache Maven官网:

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

4.仓库

Maven通过仓库来统一管理文件,同时,为了实现重用,项目构建后生成的构件也安装或部署到仓库中。Maven仓库的分为本地仓库和远程仓库,而远程仓库又包含中央仓库、私服和其他公共库。初始状态下,本地仓库是不存在的,当用户执行Maven命令后,则创建本地仓库,并根据实际需要,从远程仓库下载构件至本地仓库。

JAVA

(1).本地仓库:一般来说,在Maven项目目录下,没有诸如lib这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要依赖文件,它总是基于坐标使用本地仓库的依赖文件。通过setting.xml文件标识:

D:/repository/

(2).远程仓库:相对本地仓库而言;

(3).中央仓库:是一个默认的远程仓库;包含了大部分的开源JAVA构件以及源码等信息。Maven的安装文件自带了中央仓库的配置。在Maven的安装目录下:$MAVEN_HOME\\lib\\maven-model-builder-3.3.9.jar

JAVA

JAVA

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

具体内容解释如下:

JAVA

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~~~~

JAVA

执行命令:

JAVA

通过交互构建hello示例应用,生成的文件视图大致为:

JAVA

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分