前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenDaylight新建HelloWorld工程并集成版本

OpenDaylight新建HelloWorld工程并集成版本

作者头像
SDNLAB
发布2018-04-02 14:32:06
1.1K2
发布2018-04-02 14:32:06
举报
文章被收录于专栏:SDNLABSDNLAB

网上很多OpenDaylight的HelloWorld教程,本人就参照Lithium-SR3版本的Developers Guide (大约在17-21页),写了一个HelloWorld项目。

本文对新建工程和集成到发行版的过程进行简单总结。

1、生成新的MAVEN工程。

cd ~/work/odl

代码语言:javascript
复制
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等工程源码,采用此命令后会大大减少依赖下载,缩短新建时间。该参数值的查询可到(链接)。

要输入的值如下:

代码语言:javascript
复制
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中找到编译好的文件,如下:

代码语言:javascript
复制
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存在:

代码语言:javascript
复制
sdn@sdn100:~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system$ mkdir -p org/opendaylight/hello2

进入hello2目录:

代码语言:javascript
复制
sdn@sdn100:~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system$ cd org/opendaylight/hello2/

复制~/.m2中相应内容:

代码语言:javascript
复制
sdn@sdn100:~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/system/org/opendaylight/hello2$ cp -r ~/.m2/repository/org/opendaylight/hello2/* .

此时该目录包含的内容包括:

代码语言:javascript
复制
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:

代码语言:javascript
复制
~/work/odl/distribution-karaf-0.3.3-Lithium-SR3/bin/karaf

记得首先执行的是安装odl-mdsal-clustering,再安装其他特性:

代码语言:javascript
复制
feature:install odl-mdsal-clustering
feature:install odl-restconf
feature:install odl-dlux-all

若不安装odl-mdsal-clustering,直接安装odl-dlux-all,则登录网页时会报Login Failed,事实上是验证服务无法使用。

添加hello2的仓库,执行:

代码语言:javascript
复制
feature:repo-add mvn:org.opendaylight.hello2/hello2-features/1.0-SNAPSHOT/xml/features

查看添加情况:

feature:list | grep hello2

已经可以看到新装的特性。

最后执行安装:

代码语言:javascript
复制
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,难免有理解、操作上的错误,若发现问题,希望各位及时指出,谢谢。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档