下一篇:odl自开发插件集成到发行版(opendaylight学习笔记二)
1、环境依赖
release/magnesium-sr3 jdk11/maven3.5.2以上 release/carbon-sr1 jdk1.8/maven3.1以上
2、setting配置
cp -n ~/.m2/settings.xml{
,.orig} ; wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml
配置maven settings.xml 。
首先在odl的git中访问odl-parent项目,进入项目可以看到settings.xml,把这个项目拷贝到自己/etc/maven/文件夹下。(一定要注意自己拷贝的版本和要开发的版本必须要保持一致)
在使用maven-archetype-plugin:3.0.1插件创建项目时与之前版本略有不同,需要在setting.xml文件中添加odlarchtype标签。具体的配置信息如下。
<profile> <id>odlarchtype</id> <repositories> <repository> <id>archetype</id> <url>http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/</url> <releases> <enabled>true</enabled> <checksumPolicy>fail</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <checksumPolicy>warn</checksumPolicy> </snapshots> </repository> </repositories> </profile>
mvn换源
<mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given repository. The repository that | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. | <mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
3、构建一个示例模块
3.1、使用Maven和一个名为opendaylight-startup-archetype的原型创建一个Example项目
mvn archetype:generate -DarchetypeGroupId=org.opendaylight.archetypes -DarchetypeArtifactId=opendaylight-startup-archetype \ -DarchetypeCatalog=remote -DarchetypeVersion=<VERSION>
注:与原型版本一致,如:1.3.0-Carbon、1.3.0-SNAPSHOT
3.2、确保groupId和artifactId的值小写
Define value for property 'groupId': : org.opendaylight.example Define value for property 'artifactId': : example Define value for property 'version': 1.0-SNAPSHOT: : 1.0.0-SNAPSHOT Define value for property 'package': org.opendaylight.example: : Define value for property 'classPrefix': ${artifactId.substring(0,1).toUpperCase()}${artifactId.substring(1)} Define value for property 'copyright': : Copyright (c) 2015 Yoyodyne, Inc.
3.3、生成项目
mvn clean install # 可能需要注释以下内容 #it/src/test/java/org/opendaylight/example/it/ExampleTest.java #//import org.junit.Ignore;
3.4、启动实例项目
cd karaf/target/assembly/bin ls ./karaf opendaylight-user@root>log:display | grep Example#验证项目 opendaylight-user@root>logout #退出karaf
4、定义一个简单的Hello World
4.1入口点在impl项目中
impl/src/main/java/org/opendaylight/hello/impl/HelloProvider.java
4.2、实现正在执行的所有新操作HelloProvider.init
/ * Method called when the blueprint container is created. */ public void init() {
LOG.info("HelloProvider Session Initiated"); }
5、添加一个简单的HelloWorld RPC
api/src/main/yang/hello.yang
module hello {
yang-version 1; namespace "urn:opendaylight:params:xml:ns:yang:hello"; prefix "hello"; revision "2019-11-27" {
description "Initial revision of hello model"; } rpc hello-world {
input {
leaf name {
type string; } } output {
leaf greeting {
type string; } } } }
api目录下构建
mvn clean install
6、实现HelloWorld RPC
vim impl/src/main/java/org/opendaylight/hello/impl/HelloWorldImpl.java
package org.opendaylight.hello.impl; import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev.HelloService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev.HelloWorldInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev.HelloWorldOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev.HelloWorldOutputBuilder; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; public class HelloWorldImpl implements HelloService {
@Override public ListenableFuture<RpcResult<HelloWorldOutput>> helloWorld(HelloWorldInput input) {
HelloWorldOutputBuilder helloBuilder = new HelloWorldOutputBuilder(); helloBuilder.setGreeting("Hello " + input.getName()); return RpcResultBuilder.success(helloBuilder.build()).buildFuture(); } }
vim impl/src/main/java/org/opendaylight/hello/impl/HelloProvider.java
/* * Copyright(c) Yoyodyne, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.hello.impl; import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.RpcProviderService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.hello.rev.HelloService; import org.opendaylight.yangtools.concepts.ObjectRegistration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloProvider {
private static final Logger LOG = LoggerFactory.getLogger(HelloProvider.class); private final DataBroker dataBroker; private ObjectRegistration<HelloService> helloService; private RpcProviderService rpcProviderService; public HelloProvider(final DataBroker dataBroker, final RpcProviderService rpcProviderService) {
this.dataBroker = dataBroker; this.rpcProviderService = rpcProviderService; } / * Method called when the blueprint container is created. */ public void init() {
LOG.info("HelloProvider Session Initiated"); helloService = rpcProviderService.registerRpcImplementation(HelloService.class, new HelloWorldImpl()); } / * Method called when the blueprint container is destroyed. */ public void close() {
LOG.info("HelloProvider Closed"); if (helloService != null) {
helloService.close(); } } }
再次构建整个项目,这将提取您所做的更改并将其构建到项目中:
mvn clean install
7、通过REST测试Hello World RPC¶
7.1、api方式
访问http://localhost:8181/apidoc/explorer/index.html
hello(2015-01-05) POST /operations/hello:hello-world {
"hello:input": {
"name":"Your Name"}}
7.2、rest client方式
火狐https://github.com/chao/RESTClient POST http://localhost:8181/restconf/operations/hello:hello-world Header: Accept: application/json Content-Type: application/json Authorization: Basic admin admin Body: {
"input": {
"name": "Andrew" } }
8、mvn命令使用
mvn clean install -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true#跳过无用 mvn clean install --settings ./settings.xml 完整编译 mvn clean --settings ./settings.xml 清除编译成果。 mvn clean install --settings ./settings.xml>trace-name.log 保留log。 mvn clean install --settings ./settings.xml–errors 详细错误信息。 mvn clean install --settings ./settings.xml -Dcheckstyle.skip 忽略检查,加快编译。 继续编译。编译过程中失败,无需从头开始再编译,从失败位置续编。以工程sal为例,在根目录下运行命令: mvn clean install --settings ./ settings.xml-Dcheckstyle.skip–DskipTests -rf :sal
9、附url
官方:
https://wiki-archive.opendaylight.org/view/GettingStarted:Pulling,_Hacking,_and_Pushing_All_the_Code_from_the_CLI#Gerrit_Setup
在OpenDaylight控制器上开发应用程序: https://docs.opendaylight.org/en/stable-magnesium/developer-guide/developing-apps-on-the-opendaylight-controller.html#
插件集成到发行版 https://docs.opendaylight.org/projects/integration-distribution/en/stable-magnesium/add-project-distribution.html#id1
个人:
https://www.sdnlab.com/11587.html
http://www.frank-durr.de/?p=84
https://www.sdnlab.com/19857.html (*)
https://account.fnedu.com/17399.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/80004.html