第一个opendaylight项目:HelloWorld!

1.前言

​  出于本人研究课题需要,实现自定义opendaylight控制器的功能,需要修改控制器的内部代码,因此必须梳理清楚ODL的内部逻辑,目前互联网上的中文资料比较少,即使有,时间也比较久远,由于ODL社区迭代的关系,常常会因为版本、插件、编译等环境上的因素导致实验进展不下去。本人在复刻@枫零NET写的一篇时间较新的教程后,受益匪浅,并且在他的鼓励下,决心把自己解决相关问题的过程记录下来,分享给他人,希望能对大家有所帮助!

​ 本文的参考资料包括@枫零NET的教程,他的主要内容来自于程丽明老师的SDN环境部署与OpenDaylight开发入门;包括@u_hcy2000的博客 三、OpenDaylight应用基础开发(ODL的Hello World),他的内容来自于SDNLAB未来网络学院的opendaylight开发基础篇网课,主讲耿兴元老师,但是某些地方有细微出入;本人也购买了相应网课。

​ 本文只是对上述博客的一种补充说明.

2.环境

​ 本人所使用的实验环境如下:列出供大家对比

1️⃣ JDK8:“1.8.0_202”,使用JDK16时,遇到了bug,据说是高版本的JDK包缺东西,因此建议使用JDK8;

[ERROR] 不再支持源选项 5。请使用 7 或更高版本。

2️⃣Maven: Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537);

3️⃣win11,Windows操作系统对opendaylight的兼容性不是很好,尤其是使用Maven编译时,很容易出bug,我在这一步被卡了很久,建议使用linux虚拟机;

4️⃣VMware16,安装Ubuntu16.04;

5️⃣IntelliJ IDEA Community Edition 2021.3.1:社区版的就够用了,用IDEA可以在Maven编译的时候提供方便;

6️⃣如果是用虚拟机,建议使用Xshell7远程连接,能提供回滚和复制粘贴功能,比较方便;

7️⃣Postman v9.17.2 ,用于调用API接口.

​ 本人是在win11环境下直接实验的,虽然中间遇见了很多bug,但是还是能解决,所以实验环境因人而异.

3.步骤

​ 本实验可以粗略的被划分为: 生成项目骨架➡️修改项目代码➡️验证实验结果 三个部分.

3.1生成项目骨架

3.1.1一些区别

​ 这一步主要的作用是让Maven为你生成一个ODL项目的骨架,这个项目中具体有哪些文件、这些文件的作用和它们之间的关系取决于你指定的项目原型,所以你必须告诉Maven去哪里找到你想要的项目原型.这一步在我学习的过程中发现了三种不完全相同的方式:

​ 第一种:参见枫零NET的教程,他在Maven的配置文件settings.xml中修改了配置.

​ 第二种:参见u_hcy2000的博客 三、OpenDaylight应用基础开发(ODL的Hello World),他没有修改maven的配置文件,但是在指令中告诉Maven了,如下:

mvn archetype:generate

-DarchetypeGroupId=org.opendaylight.controller

-DarchetypeArtifactId=opendaylight-startup-archetype

-DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.release/

-DarchetypeCatalog=remote

-DarchetypeVersion=1.5.1

​ archetype翻译过来是原型的意思,上述指令的意思是告诉Maven:

​ 到这个仓库http://nexus.opendaylight.org/content/repositories/opendaylight.release/找org.opendaylight.controller 中的opendaylight-startup-archetype 这个项目原型,并且版本是Version=1.5.1,项目的目录archetypeCatalog也要通过远程remote 的方式获取,然后按照找到的项目原型生成项目骨架.

​ 我最后使用的方法是这种.

​ 第三种是SDNLAB未来网络学院的opendaylight开发基础篇网课,他的代码是:

mvn archetype:generate

-DarchetypeGroupId=org.opendaylight.controller

-DarchetypeArtifactId=opendaylight-startup-archetype

-DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/public/

-DarchetypeCatalog=http://nexus.opendaylight.org/content/repositories/public/archetype-catalog.xml

-DarchetypeVersion=1.3.1-Carbon

​ 可以看出区别是指定了项目目录archetypeCatalog在仓库中的位置,并且版本是1.3.1-Carbon.这两种的GroupID都是controller,但枫零NET教程的GroupID是archetypes,并且他发现在不同的Group下有相同名字的包:

​ 他们有什么区别我也不知道,这里给大家贴上搜索maven包的地址:https://search.maven.org/上述结果是从这里搜出来的.

3.1.2一些建议

​ 在windows下使用Maven安装项目时建议执行以下命令 ,该命令跳过了一些test,否则会出现非常多test导致的bug,这一点基础篇网课也有提到,因此也可以考虑用linux做实验.

mvn clean install -Dcheckstyle.skip -DskipTests -e

​ 这一步还可以使用IDEA完成,这里有一个窍门,是我在不知道应该跳过哪些Maven的test阶段时使用的:

​ 把这个图表背景点灰,IDEA会自己帮你跳过test阶段:

​ 在这里敲以下命令,能得到相同的效果:

mvn clean install -Dcheckstyle.skip

在后续的学习中,我突然遇见了环境混乱的bug,就是说本来做过好多次的创建项目的操作,竟然又失败了,经过我的排查,建议大家按照@枫零NET的教程进行,风险较小。

3.2修改项目代码

​ 主要过程参见上述博客,根据版本的不同,有些生成版本的features/…/pom.xml文件中是包含yangman的,可以直接访问http://localhost:8181/index.html#/yangman/index;但是有些版本需要自己添加,具体是在features/odl-artifactid-rest/pom.xml中添加以下依赖:

org.opendaylight.dluxapps

odl-dluxapps-yangman

0.7.1

xml

features

3.3验证实验结果

​ 最后调用API时,url的路径不是完全一样的,枫零NET的教程中的url就不适合我的,我的是 http://localhost:8181/restconf/operations/traffic:hello-world,具体到哪里去看这个路径跟版本有关,我这里又跟SDNLAB未来网络学院的opendaylight开发基础篇网课不完全相同,它是可以直接用浏览器使用apidocs项目,我的不行.

如果安装了yangman依赖,结果如下:

4.结语

​ 整个实验的过程我有很多知其然不知其所以然的问题,还得进一步梳理,例如Rpc是怎么自动生成代码的,又是怎么注册到Karaf中去的,我的研究课题逼迫我必须弄清楚这些事情.

​ 五一被隔离在家几天,终于把这个看似简单的入门级例子复刻出来了,上述过程我得到了枫零NET的很多帮助,他虽然比我年龄小,但是解决问题的能力却比我强,钻研的也比较深,很高兴认识一个同样研究领域的小伙伴,这是比做出了实验还令我高兴的事,向他学习!

​ 我在学习opendaylight过程中最难受的是资料的缺少,互联网上的中文opendaylight资料实在是太少,而且时间\版本也对不上,遇到了bug也查不到的解决办法,甚至不知道别人是否也遇到了相关问题,我想结交一些学习opendaylight的朋友,大家互通有无共同进步,如果你们也有相同的想法,可以加我的QQ:839589600.如果人多,我们可以建一个交流群!

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: