最近开始学习opendalight二次开发,从官网的给定的文档以及李呈的文档。不过配置时总有点问题,由于之前没怎么倒腾过java这一套东西,包括osgi, RESTful api, maven等这一套。现总结如下,如果有谁有错误的可以帮助到:
新手常问的问题就是:为什么我和xxx配置一模一样,我的就不行?好吧,其实我也一样。
- 定义yang文件,然后mvn install。此处不会有太大问题,要是mvn报错一般是因为网速不行,有些包download不下来,换个网速快点的就可以了。
- 创建bundle实现之前yang文件定义的接口。此处会有较大的问题,在配置pom.xml时,我按文档上给的配置,然后将mvn后生成的包拷到controller的plugin中(该文件存放所有运行的jar包),启动一直报错:
BundleException: The bundle "org.opendaylight.controller.ping.plugin_0.4.0.SNAPSHOT [98]" could not be resolved. Reason: Missing Constraint: Import-Package: org.opendaylight.controller.sal.binding.api; version="[1.1.0,2.0.0)"
根据这篇报错文档给出的说明:这类错误往往是版本的问题。这里报错提示的版本号最低需要1.1.0。这是因为自己pom.xml定义的该版本。查阅controller plugin文件发现,只存在版本号为1.0-1
的。但是~/.m2
目录下存在1.1.0版本号。于是我将该版本号对应的包拷贝至controller的plugin目录下,发现还是不行。正确的方式是:修改pom.xml文件中的版本号为1.0-1
,然后重新mvn install一下,继续重复以上操作;这时候发现还是有依赖问题,只不过这一次报的是:gogo: BundleException: The bundle "org.opendaylight.controller.ping.plugin_0.4.0.SNAPSHOT [258]" could not be resolved. Reason: Missing Constraint: Import-Package: org.opendaylight.controller.sal.common.util; version="[1.1.0,2.0.0)"
注意下划线部分,于是从~/.m
2文件夹中拷贝相应的包到controller的plugin下即可,注意这时候还需要修改pom.xml
下的sal.common.util
版本号从1.1
到1.0-1
。Osgi下ss ping发现对应的包为active,即为可用。Done!利用代码测试,返回成功。 - 基本没什么问题,需要注意的就是pom.xml中的版本号需要跟上面一样修改一下。
- 键入命令:
curl --user "admin":"admin" -X PUT http://localhost:8080/controller/nb/v2/ping/127.0.0.1
完成ping功能。 - 最后一步整合到controller总体编译时,注意作者写的model.ping有误,应该为model-ping。
Done!