osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld
环境准备:
jdk版本号
jdk:1.7
karaf:
版本号:apache-karaf-3.0.1
下载地址:
http://pan.baidu.com/s/1qWM4Y1u
http://karaf.apache.org/
配置本地仓库:
參考:http://blog.csdn.net/wobendiankun/article/details/25333113
启动karaf:
karaf_home/bin/karaf.bat
启动成功例如以下:
安装 mvn-hello-provider 到本地仓库
hello.java
package com.demo.hello; public class Hello {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Hello() {
this.name="jack";
}
public void sayHi(){
System.out.println("hi:\t"+this.name);
} }
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.demo.hello</groupId>
<artifactId>mvn-hello-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging> <name>mvn-hello-provider</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>com.demo.hello</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
执行命令:
mvn clean install
安装 mvn-hello-consumer 到本地仓库
HelloClientActivator.java
package com.demo.hello.activator; import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext; import com.demo.hello.Hello; public class HelloClientActivator implements BundleActivator{
Hello hello;
public void start(BundleContext context) throws Exception {
hello=new Hello();
hello.sayHi();
} public void stop(BundleContext context) throws Exception {
hello=null;
} }
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.demo.hello</groupId>
<artifactId>mvn-hello-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging> <name>mvn-hello-consumer</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.demo.hello</groupId>
<artifactId>mvn-hello-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Export-Package>com.demo.hello.client</Export-Package>
<Private-Package>com.demo.hello.*</Private-Package>
<Import-Package>com.demo.hello,
org.osgi.framework
</Import-Package>
<Bundle-Activator>com.demo.hello.activator.HelloClientActivator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>执行命令:
mvn clean install
部署bundle到karaf
注意部署顺序
先部署,mvn-hello-provider,再mvn-hello-consumer
在karaf命令行中执行命令:
bundle:install -s mvn:com.demo.hello/mvn-hello-provider/0.0.1-SNAPSHOTbundle:install -s mvn:com.demo.hello/mvn-hello-consumer/0.0.1-SNAPSHOT执行结果:
源码下载
osgi实战学习之路:2. maven+maven-bundle-plugin+karaf搭建osgi之HelloWorld的更多相关文章
- osgi实战学习之路:4.Bundle
</pre></h1><h1 style="margin:0 0 0 40px; border:none; padding:0px"><p ...
- osgi实战学习之路:3. osgi分层概念及相互合作demo
源码下载 分层: modual: 主要作用于包级管理与共享代码 lifecycle: 主要作用于执行期间的模块管理与訪问osgi底层框架 service: 主要作用于多模块之间的相互通信 demo: ...
- osgi实战学习之路:8. Service-3之ServiceTracker
通过ServiceTracker能够对查找的Service进行扩展 以下的demo引入装饰器模式对Service进行日志的扩展 demo: Provider student-manage/Activa ...
- osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo
生命周期中关键3个类: BundleActivator 入口点,类似main方法 BundleContext Bundle上下文对象,在执行期间,为应用程序提供操作osgi框架的方法 Bundle 代 ...
- osgi实战学习之路:6. Service-1
什么是Service? 它是注冊到osgi的一个java对象 Service注冊: 通过BundleContext::registerService(java.lang.String[] clazze ...
- osgi实战学习之路:1. ant+bnd+felix搭建osgi之HelloWorld
开发环境分为三个部份 osgi_provider: bundle开发环境,对外提供服务 osgi_consumer: 引用其他bundle osgi_main: 执行測试 项目主要内容 : commo ...
- Spring Boot的学习之路(03):基础环境搭建,做好学习前的准备工作
1. 前言 <论语·魏灵公>:"工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者." 工欲善其事必先利其器.我们在熟悉一个陌生项目的时候,首先会大概去看一 ...
- Android开发学习之路--MAC下Android Studio开发环境搭建
自从毕业开始到现在还没有系统地学习android应用的开发,之前一直都是做些底层的驱动,以及linux上的c开发.虽然写过几个简单的app,也对android4.0.3的源代码做过部分的分析,也算入门 ...
- Maven - Maven3实战学习笔记(1)Maven使用入门
1.maven安装 1>http://maven.apache.org/download.cgi下载apache-maven-3.6.1 2>解压缩安装包到指定的文件夹,如C:\fyliu ...
随机推荐
- Delphi 中的自动释放策略
来自万一老师的博客:http://www.cnblogs.com/del/archive/2011/12/21/2295794.html ------------------------------- ...
- 画弧线DrawArc的研究-我自己 -- 直线交接圆角
procedure TForm4.Button7Click(Sender: TObject); var pwith: Integer; //画笔的宽度 hx1, hy1: Integer; //横线第 ...
- ffmpeg 编译graph2dot
cd ffmpeg ./configure make make tools/graph2dot
- 实验吧 recursive write up
这是一个python写的文件 推测是用Freeze打包 所以必有一个Py_FrozenMain函数 分析函数有两个变量PYTHONINSPECT”和“PYTHONUNBUFFERED”之后都会调用ge ...
- 【JAVAWEB学习笔记】30_WEB总结_思维导图
可以在浏览器放大来查看细节,或者另存为图片到本地电脑查看.
- Tornado(二)
跨站请求伪造CSRF 开启xsrf(就是叫法不一样和csrf一样),'xsrf_cookies':True settings = { 'template_path':'template', 'stat ...
- python 爬取世纪佳缘,经过js渲染过的网页的爬取
#!/usr/bin/python #-*- coding:utf-8 -*- #爬取世纪佳缘 #这个网站是真的烦,刚开始的时候用scrapy框架写,但是因为刚接触框架,碰到js渲染的页面之后就没办法 ...
- hdu 2433 Travel(还不会)
Problem Description One day, Tom traveled to a country named BGM. BGM is a small country, but ...
- [ZOJ3254] MON 9.2009Secret Code
A^x = D (mod P) 0 <= x <= M, here M is a given integer. 1 <= A, P < 2^31, 0 <= D < ...
- adroid swipeRefreshLayout无法显示进度条的问题
一句话经验:必须嵌套scrollerview或者listview