onos中引入外部依赖

Posted 水中加点糖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了onos中引入外部依赖相关的知识,希望对你有一定的参考价值。

当前版本的onos使用的是bazel进行依赖管理的

那么对于外部依赖的管理也由bazel负责

在bazel的官方文档中也有对应的说明,详细可参考https://bazel.google.cn/external/overview

在ONOS中,通过查看源码根目录下的WORKSPACE可以看到关键信息:

load(“//tools/build/bazel:generate_workspace.bzl”, “generated_maven_jars”)

对于外部依赖的引入是由generate_workspace.bzl完成的,此文件存放在项目的tools/build/bazel路径下,如下图:

在此文件中定义了依赖包的具体远程地址

每个包的依赖都和maven仓库中的资源对应。

方式一(generate_workspace.bzl)

综上所述,如果要添加其他的依赖包,在 /tools/build/bazel:generate_workspace.bzl 文件中新增对应的jar包资源即可,详细步骤照着已有的配置项添加即可(有点繁琐添加时需要仔细copy额~)

需要提一下的是:配置中的jar_sha256为对应jar的sha256的值,可以通过各种工具进行查看。
如在windows下,可以使用系统自带的certutil工具获取出文件对应的sha256值。

certutil -hashfile .\\fastjson-1.2.53.jar SHA256

方式二(推荐:deps.json+libgen)

在看generate_workspace.bzl文件时,在此文件内容最上面有这样的一段描述:

# ***** This file was auto-generated at Fri, 16 Apr 2021 09:17:29 GMT. Do not edit this file manually. *****
# ***** Use onos-lib-gen *****

即:此文件是自动生成的,不要手动编辑。使用onos-lib-gen就可以了。

那么onos-lib-gen为何物?
全局搜索一下~

tools/build下的libgen模块
快速看一下它的main类,仿佛就知道了个大概

即:BazelLibGenerator类有两个参数,分别为:

  1. input-deps.json
  2. output-workspace.bzl

它会根据传入的依赖json描述文件,自动生成bazel对应的workspace.bzl文件

在onos项目中,依赖json描述文件存放的位置为:deps/deps.json,里面就是非常熟悉的maven依赖了

添加依赖测试

为了测试,这里以添加fastjson依赖为例:

其对应的maven依赖如下:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.53</version>
</dependency>

将其转为deps.json中依赖包的格式:

“fastjson”:“mvn:com.alibaba:fastjson:1.2.53”

之后运行onos-libgen进行自动生成。

具体地:
先切换到onos-libgen对应的jar包目录,如果没有对应jar的话,就自己先用maven把它编译一下生成jar。

如我这里编译出来对应的jar的目录为:

tools/build/libgen/target/

再指定运行参数(根据具体目录修改):

java -jar onos-libgen-2.3-SNAPSHOT.jar ~/Desktop/onos/deps/deps.json ~/Desktop/onos/tools/build/bazel/generate_workspace.bzl

之后就能看到在生成了。

生成性能优化

通过查看onos-libgen的源码可知,它默认是使用的maven中央仓库的地址生成的

为了提高生成速度,咱们可以通过修改onos-libgen中下载jar包的代码提提速:

onos-libgenAetherResolver类的CENTRAL_URL修改为比较快的maven仓库地址(默认为 https://repo1.maven.org/maven2/),可以修改为公司的私服地址也可以是公网的maven仓库地址,如修改为阿里云的maven仓库地址的某个地址:

http://maven.aliyun.com/nexus/content/groups/public
http://maven.aliyun.com/nexus/content/repositories/central/
http://maven.aliyun.com/nexus/content/repositories/jcenter/
http://maven.aliyun.com/nexus/content/repositories/sping/


修改后再重新生成jar包再次运行,就会快上很多了。

以上是关于onos中引入外部依赖的主要内容,如果未能解决你的问题,请参考以下文章

SDN控制器-ONOS源码编译与mininet快速入门

SDN控制器-ONOS源码编译与mininet快速入门

ubuntu16.04下源码安装onos1.0.2

ONOS-1.6.0源码安装

Bazel - 如何处理外部 .so 库的传递依赖关系?

ONOS集群---基于docker部署