日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OSGi Bundle之Hello World

發布時間:2024/4/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OSGi Bundle之Hello World 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://developer.51cto.com/art/200909/152209.htm

本文是《你好,OSGi》系列的第二部分。之前曾介紹過OSGi是什么,下面將繼續上篇介紹的內容,講述一個簡單的OSGi Bundle:Hello World是如何開發的。

51CTO編輯推薦:OSGi入門與實踐全攻略

開發一個簡單的Hello World的OSGi Bundle(OSGi綁定包)

在OSGi中,軟件是以Bundle的形式發布的。一個Bundle由Java類和其它資源構成,它可為其它的Bundle提供服務,也可以導入其它Bundle中的Java包;同時,OSGi的Bundle也可以為其所在的設備提供一些功能。Eclipse為開發OSGiBundle提供了優秀的支持,它不僅提供了向導來創建OSGi Bundle,而且還提供了內嵌的Equinox容器,您可以使用該容器執行和調試OSGi插件。請注意每一個Eclipse插件,從本質上說,都是一個OSGi Bundle,只是這個OSGiBundle多加了一些Eclipse專用的代碼而已。下面我們來看看如何使用Eclipse開發一個簡單的OSGi的HelloWorld Bundle。

3.1.新建Bundle

1) 在Eclipse中,點擊“File->New->Project”菜單,您將會看到新項目創建對話框;

2) 在新項目對話框中,選擇“Plug-inProject(插件項目)”并點擊“Next(下一步)”按鈕,您將看到插件項目對話框;

3) 在插件項目對話框中,請鍵入下列值:

Project Name(項目名稱):com.javaworld.sample.HelloWorld

Target Platform(目標平臺):an OSGiFramework->Standard (OSGi框架->標準)

4) 對其它的要求輸入值采用缺省值,并點擊“Next(下一步)”按鈕,您將會看到插件上下文對話框;

5) 在插件上下文對話框中,請選擇缺省值并點擊“Next(下一步)”按鈕;

6) 在模板對話框中,請選擇“Hello OSGiBundle(你好,OSGi包)”模板,然后點擊“Finish(完成)”按鈕完成該項目。

Eclipse將花幾秒鐘生成HelloWorld Bundle模板代碼,它將新建兩個文件:Activator.java和MANIFEST.MF,下面,讓我們看看這兩個文件:

3.1.1. Activator.java文件

源代碼清單1.Activator.java

  • package?com.javaworld.sample.helloworld; ?
  • importorg.osgi.framework.BundleActivator; ?
  • importorg.osgi.framework.BundleContext; ?
  • publicclass?Activator?implements?BundleActivator?{ ?
  • public?void?start(BundleContext?context)throws?Exception?{ ?
  • System.out.println("Helloworld"); ?
  • } ?
  • public?void?stop(BundleContext?context)throws?Exception?{ ?
  • System.out.println("GoodbyeWorld"); ?
  • } ?
  • } ?
  • ?
  • 如果您想讓您開發的Bundle能在其啟動或關閉時通知自身,那么您應新建一個類,讓它實現BundleActivator接口,同時,您還需要遵行下列規則:

    這個實現了BundleActivator接口的類必須有一個public的、不帶參數的構造函數,這樣,OSGi框架就能調用該類的Class.newInstance()方法創建這個BundleActivator對象;

    容器將調用Activator類的start()方法來啟動Bundle,因此,我們可以在start()方法中執行一些資源初始化的操作,例如,我們可以在該方法中獲取數據庫連接,以備后用。這個start()方法的唯一參數是一個BundleObject對象,Bundles可以通過該對象和OSGi框架通訊,我們可以從該對象中獲取OSGi容器相關的一些信息;如果某個Bundle拋出異常,容器將之置為“stopped(已停止)”狀態,此時,這個Bundle就不能對外提供服務。

    如果我們要關閉一個Bundle,容器將調用Activator類中的stop()方法。因此,我們可在stop()方法中執行一些資源清理任務,比如釋放數據庫連接。

    一旦Activator類準備就緒,您就可以通過MANIFEST.MF文件把該包的合法名稱傳給容器。下面,我們就看看這個MANIFEST.MF文件。

    3.1.2. MANIFEST.MF文件

    該文件是Bundle的部署描述文件,其格式和正常JAR文件包中的MANIFEST.MF文件相同,因此它由一系列的屬性及這些屬性對應的值組成,屬性名位于每一行的開頭,我們可以稱其為屬性頭。OSGi規范規定,您可以使用屬性頭向容器描述您的Bundle。您的HelloWorld Bundle的MANIFEST.MF文件看起來應該如清單2所示:

    源代碼清單2. Hello World Bundle中的MANIFEST.MF文件

  • Manifest-Version:1.0?
  • Bundle-ManifestVersion:2?
  • Bundle-Name:HelloWorld?Plug-in ?
  • Bundle-SymbolicName:com.javaworld.sample.HelloWorld ?
  • Bundle-Version:1.0.0?
  • Bundle-Activator:com.javaworld.sample.helloworld.Activator ?
  • Bundle-Vendor:JAVAWORLD ?
  • Bundle-Localization:plugin ?
  • Import-Package:org.osgi.framework;version="1.3.0"?
  • ?
  • 我們來看看這個文件中使用的屬性頭:

    Bundle-ManifestVersion

    該屬性頭告訴OSGi容器,本Bundle將遵循OSGi規范,數值2表示本Bundle和OSGi規范第4版本兼容;如果該屬性的數值為1,那么則表示本包和OSGi版本3或更早版本兼容。

    Bundle-Name

    該屬性頭為本Bundle定義了一個簡短的、可以閱讀的名稱;

    Bundle-SymbolicName

    這個屬性頭為本Bundle定義了一個唯一的、非本地化的名字;當您需要從別的Bundles中訪問某一指定的Bundle時,您就要使用這個名字。

    Bundle-Version

    該屬性頭給出了本Bundle的版本號。

    Bundle-Activator

    該屬性頭給出了本Bundle中使用的監聽器類名字,這個屬性值是可選的。監聽器將對Activator中的start()和stop()方法監聽。在程序清單2中,該屬性頭的值為com.javaworld.sample.helloworld.Activator。

    Bundle-Vendor

    該屬性頭是對本Bundle發行商的表述。

    Bundle-Localization

    該屬性頭包含了本Bundle的本地化文件所在的位置,我們的HelloWorld Bundle中并沒有本地化文件,但Eclipse IDE仍自動產生這個屬性頭

    Import-Package

    該屬性頭定義了本Bundle中引入的Java包,我將在本文后面的依賴性管理小節中詳細講解這個問題。現在,HelloWorld Bundle已經準備就緒,讓我們來運行并看看它的輸出結果。

    3.2. 運行Bundle

    我在前面提到,Eclipse IDE中有一個內嵌的EquinoxOSGi容器,您可以利用它來執行或調試OSGi Bundle。請按照下面步驟執行剛才的HelloWorld Bundle:

    1 ) 單擊RunàRun… 菜單(譯者注,在Eclipse3.3中,請單擊RunàOpen Run Diglog…菜單);

    2) Eclipse會打開“Create,manage and run configuration(新建、管理和運行配置)”對話框,請雙擊”EquinoxOSGi Framework”按鈕,Eclipse將打開運行時配置對話框;

    3) 在上面的對話框中,將Name(名稱)輸入框的值改為HelloWorld Bundle;

    4) 您會注意到在Workspace插件目錄下,有一個名為com.javaworld.sample.HelloWorld的插件,請選中它;在TargetPlatform(目標平臺)下,請確保org.eclipse.osgi插件被選中。您的Run(運行)對話框應該看起來如圖1所示:

    ?

    圖1. HelloWorld Bundle的運行配置

    5) 現在,請單擊Run(運行)按鈕,您應該看到控制臺視圖上打印出“HelloWorld”。其實,Eclipse是在控制臺視圖中打開OSGi控制臺。

    3.2.1. OSGi控制臺

    OSGi控制臺是OSGi容器的命令行界面,您可以在這個控制臺上啟動、停止、安裝、更新和刪除Bundles。在EclipseIDE中,請點擊該控制臺視圖獲得焦點,然后按回車鍵,這時您可以看到OSGi提示符,如圖2所示:(譯者注,在Eclipse3.3中,如果您沒有看到OSGi提示符,請在圖1的運行配置中,點擊Arguments標簽,然后在ProgramArguments(程序參數)輸入框中鍵入“-console”,然后再次運行該Bundle)。

    ?

    圖2. OSGi控制臺和HelloWorldActivator.java

    下面是幾個經常使用的OSGi命令,您可以使用這些命令與OSGi容器進行交互。

  • ss:?該命令顯示所有已安裝的Bundles及它們的狀態,它將顯示Bundle?ID,Bundle的簡短名稱及Bundle狀態; ?
  • start<?bundleid>:?該命令將啟動一個Bundle; ?
  • stop<?bundleid>:?該命令將停止一個Bundle; ?
  • update<?bundleid>:?該命令使用新的JAR文件更新一個Bundle; ?
  • install<?bundleid>:?該命令將一個新的Bundle安裝到OSGi容器; ?
  • uninstall<?bundleid>:?從OSGi容器中卸載一個已安裝的Bundle。 ??
  • 請注意,這些命令是OSGi規范中規定的,因此,您可以使用它們和任何OSGi容器交互。

    讀到這里,希望您對OSGi Bundle的開發有了一個大致的了解。

    ?

    ?

    =================

    http://zhoufu24.iteye.com/blog/131787

    幾種OSGI bundle的打包方法及注意事項

    OSGImavenEclipse配置管理項目管理? 前言:我相信做基于OSGI框架開發的朋友,對于OSGI的基本單元Bundle應該并不陌生,平時的開發中,做得最多事情就是bundle的開發和打包了,打包其實屬于蠻重要的一個過程,為什么說他重要呢,其實打包的過程就是一個理清bundle依賴關系的過程,在對OSGI的學習和使用過程中,個人覺得最令人頭痛的就是bundle之間的依賴關系,而且我到現在為止還沒有找到一種比較好的工具能夠很好的管理OSGI環境中的各個bundle的依賴關系。不過現在公司也有開始考慮做一些類似phpadmin,mysqladmin這樣的基于web的管理工具來對bundle進行統一管理,在這之前,如何解決依賴關系,如何將bundle正確的打包出來并進行部署成了OSGI開發中的一個主要問題,而這篇文章中,我主要介紹目前我自己用過得幾種打包方式,總結下經驗,如果大家有更好的方法或者有不清楚的地方也可以提出來一起討論~

    第一種方法就是直接通過eclipse提供的export功能,來直接導出一個一個插件工程,這個過程,相信大家已經用的很熟悉了,直接eclipse給你的提示一步步來就可以了。


    這里我只想稍微提幾個注意的問題,首先是在打包的時候注意把必要的資源文件給勾選上,像我有時就忘記勾選上一些OSGI service的配置文件,而導致service不能發布或者獲取。其次,檢查好你的項目自描述文件MANIFAST.MF里面的OSGI相關的配置信息是否都已經寫正確,該export和該import的包是否寫對,個人覺得OSGI最讓人頭疼的就是解決bundle之間的依賴關系,有時候OSGI環境一大,依賴關系變得復雜,導出包,引用包常常會容易混淆,所以對OSGI環境中的組件的依賴進行統一管理和限定,可以使bundle的依賴更加清晰,環境也易于管理,降低OSGI開發復雜度。最后,有時候在導出包的時候會碰到一些問題,比如bundle之間循環調用,多半還是由于Bundle之間的依賴發生了沖突的關系,檢查一下是否多個bundle是否導出了相同包,bundle的引入包是否正確等等。

    第二種方法則是利用apache為maven2.0提供的一個專門來打OSGI包的felix(http://felix.apache.org/site/maven-osgi-plugin.html)插件來利用maven進行OSGI bundle的打包工作,felix這個插件在maven中的使用還是比較容易的。官方網站(http://cwiki.apache.org/FELIX/osgi-plugin-for-maven-2.html)上給出了一個比較詳盡的使用說明,這里我大致說明一下,只需要在項目的pom文件中配置一個plugin就ok了,最簡單的配置如下:<o:p></o:p>

    xml 代碼
  • <plugins>??
  • ??<plugin>??
  • ????<groupId>org.apache.felix.plugins<!---->groupId>??
  • ????<artifactId>maven-osgi-plugin<!---->artifactId>??
  • ????<extensions>true<!---->extensions>??
  • ????<version>0.3.0<!---->version>??
  • ????<configuration>??
  • ??????<manifestFile>resources/manifest.mf<!---->manifestFile>??
  • ????<!---->configuration>??
  • ??<!---->plugin>??
  • <!---->plugins>??
  • 當然,這種配置就是告訴maven在對你的項目進行打包的時候直接使用resources/manifest.mf文件進行打包了,除此之外,如果你并不想一開始就指定一個MANIFAST.MF文件,而是將這個工作在打包過程交給felix去完成的話,那么你可以為MANIFAST.MF文件配置一些必要的屬性,然后felix會根據這個屬性來生成一個MANIFAST.MF一起打包到項目中,如:<o:p></o:p>

    xml 代碼
  • <plugins>??
  • ??<plugin>??
  • ????<groupId>org.apache.felix.plugins<!---->groupId>??
  • ????<artifactId>maven-osgi-plugin<!---->artifactId>??
  • ????<extensions>true<!---->extensions>??
  • ????<version>0.3.0<!---->version>??
  • ????<configuration>??
  • ??????<osgiManifest>??
  • ????????<bundleName>My?OSGi?Application<!---->bundleName>??
  • ????????<bundleDescription>An?example?bundle?application<!---->bundleDescription>??
  • ????????<bundleActivator>org.safehaus.bundle.Activator<!---->bundleActivator>??
  • ????????<importPackage>org.osgi.service.log<!---->importPackage>??
  • ????????<bundleVendor>Safehaus<!---->bundleVendor>??
  • ??????<!---->osgiManifest>??
  • ????<!---->configuration>??
  • ??<!---->plugin>??
  • <!---->plugins>??

  • 顯然,從<osgimanifest></osgimanifest>標簽開始,你就是在手動的寫一個MANIFAST.MF文件的相關OSGI配置信息了,此外你還可以加上一些打包配置來將指定的資源文件進行打包,如:

    在<osgimanifest></osgimanifest>標簽以內加入如下的設定

    <_include>

    ?????? -target/classes/META-INF/details.bnd

    <!---->

    <_classpath>target/classes<!---->

    第一種是告訴maven將一個指定文件打包

    第二種是設定編譯后類文件的存放位置

    <o:p>?</o:p>

    這里提供一個實際運用的簡要配置模板實例,大家可以稍作修改就可以直接使用了:

    xml 代碼
  • <plugin>??
  • ????<groupId>org.apache.felix<!---->groupId>??
  • ????<artifactId>maven-bundle-plugin<!---->artifactId>??
  • ????????<extensions>true<!---->extensions>??
  • ????????????<configuration>??
  • ????????????????<instructions>??
  • ????????????????????<Bundle-Version>??
  • ????????????????????????${project.version}??
  • ????????????????????<!---->Bundle-Version>??
  • ????????????????????<Bundle-SymbolicName>??
  • ???????????????????????$(replace;${project.artifactId};-;_);singleton:=true??
  • ????????????????????<!---->Bundle-SymbolicName>??
  • ????<!---->??
  • ????????????????????<_classpath>target/classes<!---->_classpath>??
  • ????????????????????<Export-Package>??
  • ???????????????????????com.yourcompany.artifactId.*;version="${project.version}"??
  • ????????????????????<!---->Export-Package>??
  • ????????????????????<Import-Package>??
  • ????????????????????????org.springframework.test;resolution:=optional,*??
  • ????????????????????<!---->Import-Package>??
  • ????????????????????<DynamicImport-Package>*<!---->DynamicImport-Package>??
  • ????????????????????????<!---->??
  • ????????????????????<_include>??
  • ????????????????????????-target/classes/META-INF/details.bnd??
  • ????????????????????<!---->_include>??
  • ????????????????????<Include-Resource>??
  • ????????????????????????<!---->??
  • ????????????????????????<!---->Include-Resource>??
  • ????????????????????<!---->instructions>??
  • ????????????????<!---->configuration>??
  • ????????????<!---->plugin>??
  • 以上僅是我在實際項目中打包時候的設置過得一個樣例,僅供大家參考,大家可以根據實際項目信息來自行設置自己的項目描述。具體的其他OSGI相關配置所應對應設定什么樣的標簽的內容,請參考apache官網(http://cwiki.apache.org/FELIX/osgi-plugin-for-maven-2.html)提供的參考。

    配置完畢后,在當前項目目錄下,運行maven的package命令,就能得到一個由你自己自配置的一個OSGI bundle了。

    第三種方式:

    利用OPS4J組織提供的一個叫Pax的工具來進行OSGI bunder的構建. 這里需要說的就是,我什么要用PAX來構建一個OSGI工程呢,eclipse不是已經有很好的OSGI開發支持了么,這里要說的就是,PAX構建的OSGI工程并不是單單某個OSGI bundle的開發,而是,PAX會主動的為你創建一個基本的OSGI環境,這個環境包括一些OSGI的基礎包,你可以通過PAX的命令來啟動這個OSGI環境,同時PAX也會將其管理的一些Bundle進行打包實時發布到這個環境中,這樣不但可以按需的打包bundle,還可以迅速的構建一個OSGI環境來進行調試了。這里我簡要的說一下PAX的使用方法,PAX是一個專門用來構建和管理OSGI 環境的一個工具,從官網的介紹我們可以看到,他主要提供pax-create-project pax-add-repository pax-create-bundle pax-import-bundle pax-embed-jar pax-wrap-jar pax-move-bundle pax-remove-bundle? 等幾大腳本命令來,完成一些兒OSGI環境的構建工作。這里我只簡要介紹一下我平時幾條最常用的命令,通過這些命令的介紹來大概的給大家講解一下pax的使用方式。
    首先從官方down到pax的最新包

    Down好后,進行解壓,解壓完畢后,為了在命令行中使用,你需要將其中的bin目錄設置到環境變量PATH中,設置完畢后你就可以到你希望創建項目的目錄,利用PAX提供的第一條命令pax-create-project來創建一個OSGI工程。創建好這個工程后,我們就可以利用maven的命令來啟動這個OSGI的環境工程,pax會為幫我們構建一個基礎OSGI環境,以及將test工程中的bundle工程打成bundle部署到這個環境中去,當然我們現在還為在這個工程中創建任何bundle工程,所以,我們啟動的只是一個最小的OSGI環境。

    <o:p>?</o:p>

    接下來我們在這個PAX的工程中來創建我們bundle工程,pax提供四種命令來創建bundle的打包工程pax-create-bundle pax-import-bundle pax-embed-jar pax-wrap-jar

    pax-create-bundle是完全用pax創建一個符合OSGI規范bundle項目,最后在執行mvn clean install pax:provision 命令時,pax會把這個工程打成一個bundle然后部署到它的OSGI環境中去。

    pax-import-bundle 則是直接導入一個符合OSGI規范的bundle,這樣在啟動OSGI環境的時候pax會去指定group(-g),指定的artifactId(-a)和指定的version(-v)的repository下去搜索指定的OSGI bundle并將其導入到環境中。

    pax-wrap-jar 通過該命令則可以利用pax將一個jar包打包成一個符合OSGI規范的bundle,pax能夠對這個jar包進行分析,找出其中的依賴關系,并生成相關的MANIFAST.MF文件。再吧這個bundle部署到之前的OSGI環境中去。

    在項目中我最常用的就是以上三條,其余的命令,以及這些命令的具體使用方法大家可以參考官方網站給出的示例。

    接下來,我就利用pax-create-bundle命令來創建一個bundle工程,來給大家演示一下。

    先選擇到一個需要創建工程的目錄下

    看看一個test工程生成了,可以看到pax實際上給我們生成了一些初始的pom,大家可以打開看看

    接下來我們馬上來跑下這個工程。看看pax會給我們帶來什么效果


    先進入到text目錄,大家可以打開pax生成的pom.xml看看,實際上pax是把自己作為了一個maven的插件來供maven調用,這里我們用maven來運行這個工程,命令是mvn clean install pax:provision
    <o:p>?</o:p>


    可以看到pax為我們啟動了一個OSGI運行環境,我們用ss命令來查看但前環境中的bundle信息


    呵呵,果然是一個最小的OSGI環境。

    接下來我輸入命令來創建一個bundle工程:

    pax-create-bundle -g com.zhoufu.demo -a create_bundle_demo -v 1.0,接下來看看pax會為我們產生什么



    可以看到在test環境工程下,pax為我們創建了一個符合OSGI規范的create_bundle_demo工程


    <o:p>?</o:p>

    接下來我們就可以直接對這個工程進行maven(mvn eclipse:eclipse)使其成為一個eclipse可以識別的工程,來用eclipse對其進行開發了。

    當開發完畢后,我們就可以直接利用之前的pax:provision命令來啟動這個環境的工程,pax會依次由test目錄下的pom來檢索相應的bundle工程,按照各個bundle中pom的配置對其進行OSGI的bundle打包工作,打成bundle后再將其部署到啟動的OSGI環境中去。

    現在,我們看看我們剛才生成的那個工程里的POM文件

    xml 代碼
  • xml?version='1.0'?encoding='UTF-8'??>??
  • <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/maven-v4_0_0.xsd">??
  • ??
  • ??<parent>??
  • ????<relativePath>../poms/compiled/<!---->relativePath>??
  • ????<groupId>org.ops4j.example.test.build<!---->groupId>??
  • ????<artifactId>compile-bundle<!---->artifactId>??
  • ????<version>0.1.0-SNAPSHOT<!---->version>??
  • ??<!---->parent>??
  • ??
  • ??<properties>??
  • ????<bundle.package>com.zhoufu.demo<!---->bundle.package>??
  • ??<!---->properties>??
  • ??
  • ??<modelVersion>4.0.0<!---->modelVersion>??
  • ??<groupId>org.ops4j.example.test.bundles<!---->groupId>??
  • ??<artifactId>create_bundle_demo<!---->artifactId>??
  • ??<version>1.0<!---->version>??
  • ??
  • ??<name>${project.artifactId}?[${bundle.package}]<!---->name>??
  • ??
  • ??<packaging>bundle<!---->packaging>??
  • ??
  • ??<build>??
  • ????<plugins>??
  • ??????<plugin>??
  • ????????<artifactId>maven-dependency-plugin<!---->artifactId>??
  • ??????<!---->plugin>??
  • ??????<plugin>??
  • ????????<groupId>org.ops4j.pax.maven<!---->groupId>??
  • ????????<artifactId>maven-bundle-plugin<!---->artifactId>??
  • ??????<!---->plugin>??
  • ??????<plugin>??
  • ????????<groupId>org.ops4j.pax.construct<!---->groupId>??
  • ????????<artifactId>maven-pax-plugin<!---->artifactId>??
  • ??????<!---->plugin>??
  • ????<!---->plugins>??
  • ??<!---->build>??
  • ??
  • <!---->project>??

  • 非常好,當然,這只是個初始的POM,隨著bundle的開發,這里面肯定有一些關于bundle的依賴配置,需要增加到MANIFAST.MF文件中去,那么怎么告訴pax打包的時候生成什么樣的MANIFAST.MF文件呢,其實也就是在org.ops4j.pax.maven這個plugin的配置段里進行配置好了。如下,我從項目中,提取了一段配置的模板,大家可以參考參考

    xml 代碼
  • <plugin>????
  • ????????????????????<groupId>org.ops4j.pax.maven<!---->groupId>????
  • ????????????????????<artifactId>maven-bundle-plugin<!---->artifactId>????
  • ????????????????????<extensions>true<!---->extensions>????
  • ????????????????????<configuration>????
  • ????????????????????????<instructions>????
  • ????????????????????????????<Bundle-Version>????
  • ????????????????????????????????這里是bundle的Version????
  • ????????????????????????????<!---->Bundle-Version>????
  • ????????????????????????????<Bundle-SymbolicName>????
  • ????????????????????????????????這里是Bundle-SymbolicName的配置????
  • ????????????????????????????<!---->Bundle-SymbolicName>????
  • ????????????????????????????<!---->????
  • ????????????????????????????<_classpath>????
  • ?????????????????????????????…????
  • ????????????????????????????<!---->_classpath>????
  • ????????????????????????????<Export-Package>????
  • ????????????????????????????…????
  • ????????????????????????????<!---->Export-Package>????
  • ????????????????????????????<Import-Package>????
  • ????????????????????????????…????
  • ????????????????????????????<!---->Import-Package>????
  • ????????????????????????????<Bundle-ClassPath>????
  • ????????????????????????????????…????
  • ????????????????????????????<!---->Bundle-ClassPath>????
  • ????????????????????????????<Bundle-Activator>????
  • ????????????????????????????????…????
  • ????????????????????????????<!---->Bundle-Activator>????
  • ????????????????????????????<DynamicImport-Package>*<!---->DynamicImport-Package>????
  • ????????????????????????????<!---->????
  • ????????????????????????????<_include>????
  • ????????????????????????????????-target/classes/META-INF/details.bnd????
  • ????????????????????????????<!---->_include>????
  • ????????????????????????<!---->instructions>????
  • ????????????????????<!---->configuration>????
  • ????????????????<!---->plugin>???

  • 看見了吧,其實這個跟之前的利用maven插件來打包的方式很相似,也是把配置寫到pom之中,再由插件去進行打包,只不過這里用的插件是pax。

    <o:p>?</o:p>

    假設我們的bundle開發好了,我們再把之前的那個test工程跑一下看看

    在test目錄下敲mvn clean install pax:provision命令。看看結果<o:p></o:p>

    <u1:p>?</u1:p><o:p></o:p>

    看見沒,在我們原來的環境中多了一個新建的這個

    ?

    ?

    總結

    以上是生活随笔為你收集整理的OSGi Bundle之Hello World的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。