OpenDaylight新建HelloWorld工程并集成版本
网上很多OpenDaylight的HelloWorld教程,本人就参照Lithium-SR3版本的Developers Guide (大约在17-21页),写了一个HelloWorld项目。
本文对新建工程和集成到发行版的过程进行简单总结。
1、生成新的MAVEN工程。
cd ~/work/odl
mvn archetype:generate -DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeRepository=https://nexus.opendaylight.org/content/repositories/public/ -DarchetypeCatalog=https://nexus.opendaylight.org/content/repositories/public/archetype-catalog.xml -DarchetypeVersion=1.0.3-Lithium-SR3
请注意该命令的最后一个参数,-DarchetypeVersion=1.0.3-Lithium-SR3,该参数可指定对应的发行版版本。本人在写HelloWorld之前编译过1.0.3-Lithium-SR3的controller等工程源码,采用此命令后会大大减少依赖下载,缩短新建时间。该参数值的查询可到(链接)。
要输入的值如下:
Define value for property 'groupId': : org.opendaylight.hello2
Define value for property 'artifactId': : hello2
Define value for property 'version': 1.0-SNAPSHOT: :
Define value for property 'package': org.opendaylight.hello2: :
May 12, 2016 9:42:04 AM org.apache.velocity.runtime.log.JdkLogChute log
INFO: FileResourceLoader : adding path '.'
Define value for property 'classPrefix': Hello2: :
Define value for property 'copyright': : c
最后按Y,回车,进行确认。
2、对工程进行一次编译
此时,目录下根据之前输入的artifactId,已生成了hello2文件夹。
cd ~/work/odl/hello2
mvn clean install -D skipTests
编译结果如下:
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] hello2-api ......................................... SUCCESS [ 32.556 s]
[INFO] hello2-impl ........................................ SUCCESS [ 13.257 s]
[INFO] hello2-features .................................... SUCCESS [02:18 min]
[INFO] hello2-karaf ....................................... SUCCESS [05:53 min]
[INFO] hello2-artifacts ................................... SUCCESS [ 2.013 s]
[INFO] hello2 ............................................. SUCCESS [ 21.903 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:25 min
[INFO] Finished at: 2016-05-12T09:53:46+08:00
[INFO] Final Memory: 90M/282Ms
[INFO] ------------------------------------------------------------------------
3、代码编写,请参照Developers Guide,建议使用Eclipse编写。
该步骤主要包含yang文件的编写,定义RPC服务,然后根据yang生成相应的接口;
对接口编写实现代码,最后在Provider中对Rpc进行注册。
编写完成后请再次进行编译mvn clean install -D skipTests。
此时可在~/.m2/repository/org/opendaylight/hello2中找到编译好的文件,如下:
sdn@sdn100:~/.m2/repository/org/opendaylight/hello2$ ll
total 24
drwxrwxr-x 6 sdn sdn 4096 5月 12 09:53 ./
drwxrwxr-x 44 sdn sdn 4096 5月 12 09:44 ../
drwxrwxr-x 3 sdn sdn 4096 5月 12 09:44 hello2-api/
drwxrwxr-x 3 sdn sdn 4096 5月 12 09:53 hello2-artifacts/
drwxrwxr-x 3 sdn sdn 4096 5月 12 09:47 hello2-features/
drwxrwxr-x 3 sdn sdn 4096 5月 12 09:45 hello2-impl/
4、<可跳过该步骤>使用内置的karaf对工程进行测试
执行~/work/odl/hello2/karaf/target/assembly/bin/karaf
5、将hello2集成到ODL发行版:复制文件
本人采用的发行版为OpenDaylight Lithium SR3,解压后位于~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/,后文简称该路径为。
进入目录,可以看到其中包含system子目录,该目录即为发行版所用的仓库(Repository)。
进入system目录,并保证子目录org/opendaylight/hello2存在:
sdn@sdn100:~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system$ mkdir -p org/opendaylight/hello2
进入hello2目录:
sdn@sdn100:~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system$ cd org/opendaylight/hello2/
复制~/.m2中相应内容:
sdn@sdn100:~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system/org/opendaylight/hello2$ cp -r ~/.m2/repository/org/opendaylight/hello2/* .
此时该目录包含的内容包括:
sdn@sdn100:~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system/org/opendaylight/hello2$ ll
total 24
drwxrwxr-x 6 sdn sdn 4096 5月 12 10:12 ./
drwxr-xr-x 39 sdn sdn 4096 5月 12 10:09 ../
drwxrwxr-x 3 sdn sdn 4096 5月 12 10:12 hello2-api/
drwxrwxr-x 3 sdn sdn 4096 5月 12 10:12 hello2-artifacts/
drwxrwxr-x 3 sdn sdn 4096 5月 12 10:12 hello2-features/
drwxrwxr-x 3 sdn sdn 4096 5月 12 10:12 hello2-impl/
6、将hello2集成到ODL发行版:添加仓库
启动发行版的karaf:
~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/bin/karaf
记得首先执行的是安装odl-mdsal-clustering,再安装其他特性:
feature:install odl-mdsal-clustering
feature:install odl-restconf
feature:install odl-dlux-all
若不安装odl-mdsal-clustering,直接安装odl-dlux-all,则登录网页时会报Login Failed,事实上是验证服务无法使用。
添加hello2的仓库,执行:
feature:repo-add mvn:org.opendaylight.hello2/hello2-features/1.0-SNAPSHOT/xml/features
查看添加情况:
feature:list | grep hello2
已经可以看到新装的特性。
最后执行安装:
feature:install odl-hello2
7、测试:
登录页面http://127.0.0.1:8181/index.html,可在YANG UI/API中找到相应的功能,进行测试。
本文的关键是feature:repo-add mvn:org.opendaylight.hello2/hello2-features/1.0-SNAPSHOT/xml/features
mvn:之后:
第一节(org.opendaylight.hello2)为groupId;
第二节(hello2-features)为生成的feature文件夹名,可在~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system/org/opendaylight/hello2文件夹中进行查看;
第三节(1.0-SNAPSHOT)为版本号,可在~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system/org/opendaylight/hello2/hello2-features中进行查看;
第四、五节(xml/features)大家都这样写的,照着抄的。
至此,HelloWorld工程的新建与安装就完成了。本人也是刚刚接触ODL,难免有理解、操作上的错误,若发现问题,希望各位及时指出,谢谢。
- Apache顶级开源项目——机器学习库MADlib简介与应用实例
- 快速入门系列--WCF--06并发限流、可靠会话和队列服务
- 以太坊创始人或将卖掉所有以太坊,以太经典ETC才是未来
- SQL学习之HAVING过滤分组
- 快速入门系列--WCF--04元数据和异常处理
- linq to sql中慎用Where<T>(Func<TSource, bool> predicate),小心被Linq给"骗"了!
- 快速入门系列--WCF--03RESTFUL服务与示例
- SQL练习之不破坏应用程序现有查询的修改模式
- 快速入门系列--WCF--02消息、会话与服务寄宿
- JavaScript之面向对象学习二(原型属性对象与in操作符)获取对象中所有属性的方法
- 快速入门系列--深入理解C#
- “家庭贷款”域名Home.loans已经建站为家庭贷款相关的网站
- 微信亿级用户异常检测框架的设计与实践
- 程序员必知的6点编程秘诀,编程三板斧将解决90%问题!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux根据进程号PID查找启动程序的全路径
- linux服务器安装PHP扩展zip,zlib方法
- Lamp环境下设置绑定apache域名的方法分析
- Linux杀不死的进程之CPU使用率700%解决方法
- 解读Linux下ip命令展示的网络连接信息
- Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现
- Linux环境使用g++编译C++方法总结
- linux命令实现音频格式转换和拼接的方法
- Apache 解决80端口占用问题
- Centos7搭建主从DNS服务器的教程
- ubuntu 下JDK环境变量配置方法
- Linux部署msmtp+mutt发送邮件功能
- linux使用QQ实现网络邮件报警功能
- Linux初学(CnetOS7 Linux)之切换命令模式和图形模式的方法
- linux expect 自动登录交换机保存配置的方法