作者:seriouszyx
首发地址:https://seriouszyx.com
代码均可在 GitHub 上找到
源码配置
作为一名开发者,Release 包不能满足所有的需要,下载源码成了绕不开的路。
git clone https://gerrit.onosproject.org/onos
ONOS 提供了很多利于开发的工具,将它们添加到 bash 配置文件中,就可以直接使用这些工具。ONOS 源码目录需要按自己的情况指定,我将配置写入到 /etc/profile
中。
export ONOS_ROOT="/root/onos"
source /root/onos/tools/dev/bash_profile
最新版本的 ONOS 可以使用 Bazel 进行源码构建运行,因为此前已通过 Docker 运行,Bazel 构建时速度又很慢,所以我在本地开发后直接推送到 Docker 中的控制器中,大家也可以按自己的需求选择合适的工作流。
安装依赖环境
ONOS 应用使用 Maven 构建和管理第三方包,可以直接使用 apt
安装。
apt install maven
Maven 官方下载通道速度很感人,强烈建议配置一下国内源,我的配置文件在 /etc/maven/settings.xml
,在 mirros
中加入阿里的源。
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
IDE 我比较喜欢 IntelliJ IDEA,下载社区版就可以,完整版也可以使用学生邮箱免费使用,安装教程之前写过,这里直接发一下链接。
建立工程
ONOS 插件化管理应用,官方提供了 onos-create-app
工具便于开发者创建工程结构。首先要指定使用哪个版本的 ONOS API 开发,最好将它也写入到 /etc/profile
中,如果缺少这步的话,可能无法正常建立工程。
export ONOS_POM_VERSION=2.4.0
在创建的过程中,需要指定 groupId
、 artifactId
和版本号,以及该应用的名称。
onos-create-app app org.foo foo-app 1.0-SNAPSHOT org.foo.app
创建过程中会自动从 Maven 拉取所需依赖,中途输入 y
确定创建。
创建成功后,执行命令的目录下面会生成一个 foo-app
目录,进入后预览一下生成的项目框架。
打开 IntelliJ IDEA,选择 Open
选项,因为该工程目录是基于 Maven 创建的,所以直接选中 foo-app
目录即可导入。注意在设置( Ctrl + Alt + s
打开)中修改 Maven 的目录和配置文件,否则 IDEA 会使用自带的配置文件,无法使用阿里源下载。
待第三方依赖全部下载导入成功后,即可开始开发应用。其中比较重要的是 AppComponent.java
, active()
为程序入口, deactive()
为应用删除时执行的部分。
构建发布
实际上,不对该工程做任何修改,它已经是一个可以正常构建发布的应用了。在右侧 maven 选项卡中,选择 install
进行构建,其实就相当于在工程目录下执行 mvn clean install
命令。
构建成功后,会在 target
目录下生成 foo-app-1.0-SNAPSHOT.oar
文件,这就是要发布到 ONOS 中的应用。执行下列命令,应用就自动发布到指定 ip 下的 ONOS 控制器 中。
onos-app 192.168.10.10 reinstall! target/foo-app-1.0-SNAPSHOT.oar
发布成功。
在 GUI 中搜索 foo
,找到刚刚发布的应用,启动后则可以正常运行。
这就是 ONOS 开发一个应用的完整流程,以后的开发则可以聚焦业务功能,无需被繁杂的环境配置搞混头脑。