文章目录

  • 1 ODL开发背景知识-Maven简介
    • 1.1 Maven是什么
    • 1.2 生命周期
    • 1.3 Maven插件
    • 1.4 依赖管理
    • 1.5 依赖传递性
    • 1.6 依赖范围
    • 1.7 依赖范围影响传递性依赖
    • 1.8 Maven仓库
    • 1.9 Maven配置
    • 1.10 Maven项目原型- Archetype (项目模板)
  • 2 ODL的Maven项目模板startup
  • 3 ODL开发APP的主要思路
  • 4 开发实战-hello world
    • 4.1 设计yang模型编译生成接口
    • 4.2 实现接口
    • 4.3 blueprint注册
    • 4.4 编译业务实现的bundle,部署到OSGI的框架中去
    • 4.5 restconf调用查看结果

1 ODL开发背景知识-Maven简介

1.1 Maven是什么

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

软件项目一般都有相似的开发过程:准备,编译,测试,打包和部署。
Maven将上述过程称为Build Life Cycle。

1.2 生命周期

Maven有三套相互独立的生命周期,这三套生命周期分别是:

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

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

1.3 Maven插件

Maven的核心仅仅定义了抽象的生命周期,具体的任务是交给插件完成的,插件以独立的构件形式存在的,Maven会在需要的时候下载并使用插件。

对于插件本身,为了能够复用代码,它往往能够完成多个任务。

Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。

内置插件

自定义插件

1.4 依赖管理

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

在Maven中,一个jar包的坐标是由它的groupId、artifactId、version这些元素来定义的。
groupId:表明其所属组织或公司及其所属项目,命名规则为组织或公司域名反转加项目名称。
artifactId:项目的模块名,通常与实际项目名称一致。模块的命名通常为项目名前缀加模块名。
version:当前项目的版本号。
packaging:定义项目的打包方式,可选值有jar、war、pom、bundle,默认为jar。

1.5 依赖传递性

传递性依赖
传递性依赖是在maven2中添加的新特征,这个特征的作用就是你不需要考虑你依赖的库文件所需要依赖的库文件,能够将依赖模块的依赖自动的引入。

依赖的版本
如果在一个项目里面出现不同的模块,依赖了一个项目的不同版本的时候判断依赖的版本。maven2.0的时候仅仅支持最近原则也就是在依赖树中的最靠近项目的版本作为依赖版本。到了maven2.0.9的时候又提出了一个最先声明原则,也就是在项目中被最早声明的被判断为依赖的版本。

1.6 依赖范围

maven有三套classpath(编译classpath,运行classpath,测试classpath)分别对应构建的三个阶段。依赖范围就是控制依赖与这三套classpath的关系。依赖范围有六种:
compile:编译依赖范围,在三个classpath都有效。
test:测试依赖范围,在编译代码和运行代码是无效。
provided:以提供的依赖范围,在编译和测试的时候有效,在运行的时候无效。例如servlet-api,因为容器已经提供,在运行的时候是不需要的。
runtime:运行时依赖范围,仅在测试和运行的时候有效。例如jdbc只有在测试和运行的时候才有效。
system:系统依赖范围,与provided范围一致,但是依赖是通过系统变量来指定依赖,不利于移植。
import(在maven2.0.9后支持):导入依赖范围,对三个classpath没有实际影响。

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

1.8 Maven仓库

Maven通过项目定义的坐标来管理这些依赖,而这些依赖的物理文件是通过Maven的仓库来统一管理的。
对于一个依赖坐标,它会按照如下方式反映到Maven的仓库中。
1、将groupId转化为路径:将groupId中的包名分隔符(.)转换成路径分隔符(/)。
2、将artifactId转化为路径:在groupId转化的路径基础上连接artifactId。生成路径为
3、将verion转化为路径
4、根据artifactId和version生成依赖包文件名
5、根据依赖的打包方式确定文件的扩展名。对于上例它的扩展名就是.jar

1.9 Maven配置

Maven的配置文件看似很复杂,其实只需要根据项目的实际背景,设置个别的几个配置项而已。
Maven有自己的一套默认配置,使用者除非必要,并不需要去修改那些约定内容。这就是所谓的“约定优于配置”

1.10 Maven项目原型- Archetype (项目模板)

Archetype 是一个 Maven 插件,其任务是按照其模板来创建一个项目结构。
mvn archetype:generate
-DarchetypeGroupId
-DarchetypeArtifactId
-DarchetypeRepository
-DarchetypeCatalog
-DarchetypeVersion

2 ODL的Maven项目模板startup

mvn archetype:generate -DarchetypeGroupId=org.opendaylight.controller -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.release/ -DarchetypeCatalog=remote -DarchetypeVersion=1.5.1


3 ODL开发APP的主要思路

  1. 在yang文件里定义一个rpc
  2. 编译生成Java接口
  3. Java代码实现yang rpc生成的接口
  4. 北向调用rpc验证

4 开发实战-hello world

4.1 设计yang模型编译生成接口


4.2 实现接口

4.3 blueprint注册


4.4 编译业务实现的bundle,部署到OSGI的框架中去

4.5 restconf调用查看结果

三、OpenDaylight应用基础开发(ODL的Hello World)相关推荐

  1. html5游戏开发-零基础开发RPG游戏-开源讲座(三)-卷轴对话实现

    前两篇,RPG的开发已经实现了添加地图和添加游戏人物,本篇来实现地图的卷轴滚动和人物对话的实现,效果如下 想要了解前两篇内容,请电击下面的链接 html5游戏开发-零基础开发RPG游戏-开源讲座(一) ...

  2. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  3. Aooms_基于SpringCloud的微服务基础开发平台实战_002_工程构建

    为什么80%的码农都做不了架构师?>>>    一.关于框架更名的一点说明 最近在做年终总结.明年规划.还有几个项目需要了结.出解决方案,事情还比较多,死了不少脑细胞,距离上一篇文章 ...

  4. 【C语言探索之旅】第三部分第三课:SDL开发游戏之显示图像

    内容简介 1.第三部分第三课: SDL开发游戏之显示图像 2.第三部分第四课预告: SDL开发游戏之事件处理 第三部分第三课:SDL开发游戏之显示图像 上一课中,我们学习了如何加载SDL库(SDL_I ...

  5. ArcGIS Engine基础开发教程(转)

    ArcGIS Engine基础开发教程(0)--目录 <ArcEngine9.3 基础开发教程>是面向初中级开发者的一份简单易用,功能全面的学习资料及参考文档.教程首先从如何来创建一个Ar ...

  6. 小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

  7. 小程序的 HelloWord 01《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

  8. Unity AssetBundles and Resources指引 (三) AssetBundle基础

    本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...

  9. php基础开发(集成环境搭建)

    php基础开发(集成环境搭建) 1.下载软件 2.安装软件并配置环境 3.验证 1.下载软件 下载地址 链接:https://pan.baidu.com/s/14rAsOm1g2WUUVaQ7E7VO ...

  10. html5游戏开发-零基础开发RPG游戏-开源讲座(四)

    了解上三篇的内容请点击: html5[color=rgb(68, 68, 68) !important]游戏开发-零基础开发RPG游戏-开源讲座(一) http://www.html5cn.org/a ...

最新文章

  1. 频谱细化(补零、zfft、czt)
  2. poj 1950 Dessert(dfs枚举,模拟运算过程)
  3. excel中定义VBA
  4. string 和 stringbuilder 的区别
  5. 私有github java调用_使用Java API从GitHub获取所有提交
  6. Strezov Sampling Trombone Ensemble Mac(长号合奏音色库)
  7. 教你如何做人的小故事
  8. linux系统移植和根文件系统制作
  9. Unity3D最全性能优化参考手册(渲染、代码、UI)
  10. Oracle卸载方法
  11. 华为静态,动态NAT,Easy IP实验!超详细,有手就能学会
  12. Unity 自定义Package
  13. java无法验证证书_如何解决“证书无效,不能用于验证本网站的身份”错误?...
  14. 网络协议和Netty(4):大白话说三次握手及用一个数据库连接解释三次握手
  15. 阿里云大学python_阿里云大学课程python
  16. 慕课网——MySQL优化
  17. C程序员必读的 3 本书
  18. 网络安全及网络安全评估的脆弱性分析
  19. 程序员要注意的健康问题
  20. “互联网+”已死 腾讯、阿里巅峰已过

热门文章

  1. PHP-SDK实现微信付款码支付
  2. 三星s8php,三星S8 Type C接口连接电视体验
  3. python linux 执行scp,python 使用标准库连接linux实现scp和执行命令
  4. 清明时节雨纷纷路-清明节习俗、诗词欣赏
  5. 程序计数器(PC ) 详解
  6. git报错unsafe repository xxx is owned by someone else
  7. vue项目的elementui表格合并
  8. 基于html的旅游网站的设计与实现
  9. Win10和win11有什么区别?想重装win10系统怎么操作?
  10. 并查集-A Bug's Life(poj2492)