ONOS已更新过无数版本,构建工具的选择也在变化。最初ONOS采用Maven编译,从1.7之后改用Buck,但1.14版本开始采用了Bazel编译工具。能够使用ONOS实现自己所需功能的APP是我们要掌握的基础技能。从网上搜集的资料来看,大多数新建自己的APP是采用的Maven工具,但现今ONOS 1.14版本源码中已经没有了pom.xml文件(Maven工程中重要的依赖关系文件),取而代之的是Bazel的Build文件,这意味着,如果仍采用Maven工具构建APP,此APP就会成为一个第三方应用,无法嵌入到ONOS系统内部。以下根据自己的操作经验和资料查阅,介绍一下采用Bazel工具构建新APP的流程。
一 了解Bazel
Bazel是Google开源的一个构建工具,和Make、Bucks、 Maven等类似。Bazel被广泛应用于Google内部,它的优点如下:
Bazel借助高级本地和分布式缓存,优化的依赖关系分析和并行执行,可获得快速和增量构建。
2.One tool, multiple languages
Bazel可用来构建和测试Java、 C++ 、Android、IOS和各种其他语言平台,并可运行在Mac、 Windows 、Linux等不同系统上。
3.Scalable
可处理任意大小的代码库,可处理多个库,也可以处理单个库。
4.Extensible to your needs
使用Bazel扩展语言可支持新语言和新平台。
二 Bazel的常用命令
三 构建流程
有关ONOS的部署详情参考官方Wiki:Developer Guide,这里不做赘述,要注意的是Using an IDE部分要采用更新的Using an IDE with ONOS 1.14 or higher (Bazel Build)。
将ONOS源码导入IntelliJ之后,可以发现app代码结构中,已经没有了pom文件,Buck文件仍有保留,而BUILD文件则是需要我们修改的重要的构建规则文件。
新建包,Apps-右键New-选择New Bazel Package。
写APP的包名(包名可包含大小写字母、数字、及/ . - _ $ ( )等符号,但实验表明若包名中加有’-‘,之后无法新建 Java Class,故当出现此类问题时可考虑是文件命名问题 ),库这里任意选一个即可,因为所给选项里并没有我们要使用的库文件,之后我们会在BUILD文件里修改库文件。
完成后可以看到生成的文件夹及BUILD文件。
在文件夹中添加Java Class。
生成如下java文件,文件中已有了package包名,功能代码都在此文件中编写。
和Makefile一样,使用Bazel编译也必须满足它的项目结构要求,仿照现有APP的项目结构(如典型APP fwd),手动添加src,main等文件夹,并相应修改package包名。
下图是fwd的BUILD文件,COMPILE_DEPS 指出了编译依赖,包括CORE_DEPS核心依赖、 KRYO序列化框架依赖、 CLI命令行依赖等;osgi_jar_with_tests是我们要用到的库文件,还可能用到的库文件有osgi_jar,他们都在tools->build->bazel->osgi_java_library.bzl文件下;onos_app定义在tools->build->bazel目录下的onos_app.bzl。
仿照现有BUILD文件,改写自己的BUILD文件,再完成所需功能的java文件,就可以进行编译了。右键Run Bazel test,进行编译,若想要跳过check_style检查,可在BUILD文件osgi_jar/osgi_jar_with_tests中添加语句suppress_checkstyle = True。编译结果会产生一个.oar(Onos App aRchive)文件,这就是我们需要的APP安装文件。
在All Files中搜索.oar文件,打开文件所在位置,再Open in Terminal会发现此文件路径十分诡异,但没有关系,这就是我们要的安装文件onos-apps-Paula_test-oar.oar。
现在就到了安装app的时候了。先编译构建一下代码,onos文件夹下执行bazel build onos。 启动onos,执行bazel run onos-local -- clean debug,READY之后,另开终端进onos文件夹执行tools/test/bin/onos localhost。Onos启动成功后开始安装app,在文件目录下执行onos-app localhost install onos-apps-Paula_test-oar.oar 。
ONOS日志里会提示安装成功,onos命令行执行 >onos -s,也能看到已安装的app。安装成功之后,激活你的APP就可以愉快地使用它啦。
此外,卸载APP等操作可以查看帮助命令。
本文和大家分享了ONOS采用Bazel工具后的APP构建流程,至于APP的代码编写,会在之后的文章中和大家分享。
以上是波澜学习过程中的一点心得,第一次写文章,不足之处还望指正。邮箱: [email protected]。