新项目开发的通常做法:项目经理从团队抽调1名开发人员进行项目工程框架的搭建,剩余的开发人员先研究项目需求,并着手准备业务逻辑的设计。本地项目工程搭建后,上传SVN或git配置库,告知其他开发人员可以下载项目工程,启动开发了。开发运维人员便进行代码的编写、编译、测试以及打包等系列操作。我们将这一系列的操作称为“构建”。
构建的实质是将我们编写的Java源文件、XML配置文件、HTML页面、CSS和JS文件等,通过某种方式组合在一起,变为可对外服务项目的过程。同时,构建过程中很多都是没有技术含量且重复的工作,手工操作很无趣且太麻烦。最好能够由手工模式转变为自动化模式,这样可以大大节省时间。
构建的工具主要有:
(1). Make;
(2). Ant(Another Neat Tool):另一个整洁的工具;
(3). Maven;
(4). Gradle;
本文将介绍在SDN控制器OpenDaylight中使用的Maven工具。
Maven是Apache组织中一个开源项目,主要用于基于Java平台的项目构建、依赖管理和项目信息管理。下面来看下其几个核心概念:
坐标用于唯一标识构件(如jar,war等),坐标的元素包括groupId、artificatId、version、packaging、classifier,其中前3个是必须定义的,后2个是可选的。
① groupId:定义当前Maven项目隶属的实际项目。
② artificatId:定义实际项目中的一个Maven项目(模块),建议使用实际项目名称作为其前缀。
③ version:定义Maven项目当前所处的版本。
④ packaging:定义Maven项目的打包方式。
⑤ classifier:帮助构建输出的一些附属构件。
如前所述,软件人员每天的工作:项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等等,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的所有阶段。
在Maven的生命周期中对软件人员的工作进行了抽象,相当于做一个模板,具体的实现则由插件来完成。下面列出default生命周期的内置插件绑定关系及具体任务:
更加详细的内容可以参考Apache Maven官网:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
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).私服:是一种特殊的远程仓库,架设在公司内部。当下载构件时,从私服下载,如果私服不存在,则私服请求提供服务。
意为“原型”,可以理解为Maven项目的模板,以便用户可以快速创建项目,同时针对同类项目保持相同的项目结构及配置约定。Archetype是通过maven-archetype-plugin插件实现,官网链接:
http://maven.apache.org/archetype/maven-archetype-plugin/
OpenDaylight使用Maven工具进行项目构建和依赖管理,并在构建简单的简易APP开发一文中对Maven的基础进行介绍,链接如下:
https://docs.opendaylight.org/en/latest/developer-guide/developing-apps-on-the-opendaylight-controller.html
为了从远程仓库下载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。
Archetype是一个Maven项目模板工具包,使用Archetype来生成项目骨架,可以使得开发人员在开发新的应用程序时,使用与OpenDaylight风格一致的最佳实践方法。
OpenDaylight应用创建的Archetype可通过如下链接查询:
https://nexus.opendaylight.org/#nexus-search;gav~org.opendaylight.archetypes~~~~
执行命令:
通过交互构建hello示例应用,生成的文件视图大致为:
全部0条评论
快来发表一下你的评论吧 !