出于本人研究课题需要,实现自定义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
3.2修改项目代码
参见上述博客.
3.3验证实验结果 最后调用API时,url的路径不是完全一样的,枫零NET的教程中的url就不适合我的,我的是 http://localhost:8181/restconf/operations/traffic:hello-world,具体到哪里去看这个路径跟版本有关,我这里又跟SDNLAB未来网络学院的opendaylight开发基础篇网课不完全相同,它是可以直接用浏览器使用apidocs项目,我的不行.
4.结语 整个实验的过程我有很多知其然不知其所以然的问题,还得进一步梳理,例如Rpc是怎么自动生成代码的,又是怎么注册到Karaf中去的,我的研究课题逼迫我必须弄清楚这些事情.
五一被隔离在家几天,终于把这个看似简单的入门级例子复刻出来了,上述过程我得到了枫零NET的很多帮助,他虽然比我年龄小,但是解决问题的能力却比我强,钻研的也比较深,很高兴认识一个同样研究领域的小伙伴,这是比做出了实验还令我高兴的事,向他学习!
我在学习opendaylight过程中最难受的是资料的缺少,互联网上的中文opendaylight资料实在是太少,而且时间\版本也对不上,遇到了bug也查不到的解决办法,甚至不知道别人是否也遇到了相关问题,我想结交一些学习opendaylight的朋友,大家互通有无共同进步,如果你们也有相同的想法,可以加我的QQ:839589600.如果人多,我们可以建一个交流群!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)