什么是OpenDaylight?
OpenDaylight是SDN开发及运行的一个平台。

OpenDaylight架构特点

  • 基于OSGi的模块化设计
  • 多南向协议-OpenFlow,Netconf,OVSDB…
  • 模型驱动的业务抽象层(MD-SAL)是ODL的核心
  • 全分布式的消息及存储机制

OSGi及Karaf

OSGi的概念
OSGi(Open Service Gateway Initiative,直译为“开放服务网关”),是一个以Java为技术平台的动态模块化规范。OSGi中规定如何定义一个模块以及模块之间如何交互,Java模块被称为Bundle,OSGi就是为了使Bundle能更好的被复用。
基于OSGi的应用是由一个个Bundle组成的,这些Bundle通过OSGi组织在一起,形成了一个系统。
OSGi框架

  • 安全层
  • 模块层
  • 生命周期层
  • 服务层

Bundle概念
OSGi如果说是Java的模块开发体系,Bundle就是模块。
Bundle间的依赖
OSGi中每个Bundle都有自己的类加载器,支持包级别的类导入和类导出,Bundle通过配置MANIFEST.MF,可以控制从Bundle导出的包,而没有导出的包则在Bundle外部是无法访问的。这样就完成了内部包和外部包的隔离。


Karaf
一个基于OSGi的运行环境,提供了一个轻量级的OSGi容器,可以用于部署各种组件和应用程序。


Karaf容器特点之Feature
一组Bundle,其具备特定的功能,简化了Bundle的部署。

ODL开发—Maven基础

Maven是现在Java社区中最强大的项目管理和项目构建工具。

核心

  • 三套生命周期

    • Clean :在进行真正的构建之前进行一些清理工作。
    • Default:构建的核心部分,编译,测试,打包,部署等等。
    • Site:生成项目报告,站点,发布站点。

每套生命周期都有一组阶段(Phase)组成,平时在命令行输入的命令总会对应于一个特定的阶段。

mvn clean install
进行项目的构建

Maven插件

  • Maven的核心仅仅定义了抽象的生命周期,具体的任务是交给插件完成的,插件以独立的构件形式存在,Maven会在需要的时候下载并使用插件。
  • 对于插件本身,为了能复用代码,它往往能完成多个任务。
  • Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言,生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。

依赖管理
Maven要求每一个jar包明确定义自己的坐标,Maven就是通过这些坐标来查找管理这些jar包的。

  • 依赖传递性:不需要考虑你依赖的库文件所需要依赖的库文件,能够将依赖模块的依赖自动的引入。
  • 依赖的版本:就近原则,最靠近项目的版本

依赖范围
maven有三套classpath(编译,运行,测试)

  • compile:编译依赖范围,在三个classpath都有效
  • test:测试依赖范围,在编译和运行时有效
  • provided:提供的依赖范围,在编译和测试的时候有效,在运行的时候无效。
  • runtime:运行时的依赖范围,仅在测试和运行时有效。
  • system:系统依赖范围,与provided范围一致,但是以来是通过系统变量来指定依赖,不利于移植。
  • import:导入依赖范围,对三个classpath没有实际影响。

依赖范围影响传递性依赖:

假如A依赖于B,B依赖于C,那么A对于B为第一直接依赖,B对C为第二直接依赖,A对C为传递性依赖。

第一直接依赖和第二直接依赖的范围决定了传递性依赖的范围。

Maven仓库
Maven通过项目定义的坐标来管理这些依赖,而这些依赖的物理文件是通过Maven的仓库来统一管理的。


约定优于配置的原则
Maven有一套默认配置,使用者除非必要,不需要去修改那些约定内容。

ODL APP开发思路

OpenDaylight(ODL)学习笔记相关推荐

  1. odl自开发插件编译集成到发行版(opendaylight学习笔记二)

    上一篇:opendaylinght内核插件开发简单实现(opendaylight学习笔记一) 1.下载发行版项目源码 git clone "https://git.opendaylight. ...

  2. OpenDaylight中MD-SAL学习笔记

    1 前言 在学习OpenDaylight的过程中,总是遇到AD-SAL( API-Driven SAL)和MD-SAL(Model-Driven SAL)等概念.在努力查找资料学习之后,有了一点学习笔 ...

  3. VC++深入详解学习笔记

    VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesso ...

  4. Informatica学习笔记 .

    Informatica学习笔记1:UPDATE AS INSERT 问: 要求实现每天抽取数据,而且是如果有改变才抽取更新,没有就不更新, 因为源表中有最后修改时间的字段,我让它 和SESSION上次 ...

  5. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  6. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  9. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  10. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

最新文章

  1. MySQL中使用LIMIT进行分页的方法
  2. 资深美术分享:游戏开发如何确定画风?
  3. 《精通J2EE网络编程》中讲的JNDI 6.2 使用JNDI
  4. 判断字符串相等能否用==
  5. php mongo sort -1出错,mongoDB排序引起的ERROR
  6. 在C#中创建DataTable
  7. ASP、JSP、PHP 三种技术比较
  8. 二次规划问题转换为半正定问题(QPtoSDP)
  9. mybatis 多表查询-多对多
  10. 自动驾驶软件开发人才现状_浅析自动驾驶的重要一环:感知系统发展现状与方向...
  11. Essential Netty in Action 《Netty 实战(精髓)》
  12. 夜神模拟器的安装和使用
  13. gvdp哪个工厂用_和汽车主机厂打交道,你不可不知这些英文缩写!实用!大伙速览速记!...
  14. 只有mdf文件和ldf文件--怎么恢复数据库
  15. python 数值型字符串实现四舍五入 decimal_Python将科学计数法数值转换为指定精度浮点数...
  16. 四种物联网卡计算模式
  17. 【免杀前置课——Windows编程】十、进程间通信(COPY_DATA通信,邮槽通信)、实现两进程通信(附代码)
  18. 组合专机-某车床连接座零件的工艺规程及机床夹具设计(说明书 CAD图纸 开题报告 工序卡……)
  19. 让群晖“文本编辑器”支持更多文件扩展名
  20. setTimeout 导致的浏览器假死

热门文章

  1. 工具-4:图片识别和音乐在线识别
  2. 【Gym 100015B】Ball Painting(DP染色)
  3. r语言实现岭回归_R语言回归篇
  4. 2021 Geek re
  5. 【直线检测】基于LSD实现直线检测含Matlab源码
  6. pycharm虚拟环境 更换interpreter
  7. android 状态栏高度多少像素,Android之获取屏幕的尺寸像素及获取状态栏标题栏高度...
  8. selenium中键盘操作:Keys类
  9. 【去哪儿旅行】产品分析报告
  10. Spring Security--基于注解访问控制 @Secured@PreAuthorize