`
killko
  • 浏览: 104673 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Group-logo
Servicemix&Fu...
浏览量:0
社区版块
存档分类
最新评论

用Maven开发OSGI Bundle

    博客分类:
  • osgi
阅读更多
    可能99%用Java开发软件的同学都会用Eclipse来作为开发用IDE,特别是开发OSGI方面的,可能更有可能用Eclipse。但很不幸,可能是因为早期对Eclipse的“童年”阴影,对Eclipse大量强大的功能,觉得学习繁琐,所以本人对Eclipse有点抗拒,当然这只是个人的感受:)。

    那么不用Eclipse,我可以用什么呢?总不能用文本编辑器来写代码吧,所以我选择了netbean作为我的IDE,因为我感觉它用起来比较简单。但IDE通常会有自己的工程组织方式,所以Eclipse的工程要放在netbean上用,或者反之,都不是很方便。所以我又选择用了Maven。

    相信Maven是目前开源项目中最普遍使用的一套项目管理工具。既然是这样,我们为什么要将我们的项目和IDE捆绑在一起,为什么不统一用这个最流行的工具来构建一个项目工程,而是采用特定于某个IDE的方式来构建工程呢?

    在Netbean里,我们可以直接打开Maven工程,而在Eclipse里,则只需用mvn eclipse:eclipse就可以将Maven工程转化成一个Eclipse工程。

    开始开发OSGI Bundle时,自然也就想到用Maven来构建工程。首先,Bundle本身就是一个JAR包,它和普通JAR包的区别主要在于Manifest.mf上,所以,要构建Bundle,直接沿用构建JAR包的方式即可,再加上最方便处理Manaifest.mf的功能即可,于是,就有了一下这样的模板(POM.XML):

<project xmlns:pom="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <groupId>com.ponder.tutorials.app01</groupId>
    <artifactId>Calculator</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>app01-Calculator</name>
    <url>http://app01.ponder.com/Calculator/</url>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
             <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
               <configuration>
                <archive>
                 <manifest>
                  <addClasspath>true</addClasspath>
                  <classpathPrefix>lib/</classpathPrefix>
                 </manifest>
                 <manifestEntries>
                  <Class-Path>${project.build.finalName}.jar</Class-Path>
                  <Built-By>Ponder</Built-By>
                  <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
                  <Bundle-Name>
                   ${project.groupId}.${project.ArtifactId}
                  </Bundle-Name>
                  <Bundle-SymbolicName>${project.name}</Bundle-SymbolicName>
                  <Bundle-Version>${project.version}</Bundle-Version>
                  <Bundle-Vendor>${project.groupId}</Bundle-Vendor>
                  <Bundle-Activator>
                   ${project.groupId}.${project.ArtifactId}.Activator
                  </Bundle-Activator>
                  <Export-Package>
                   ${project.groupId}.${project.ArtifactId}.Export
                  </Export-Package>
                  <Import-Package>org.osgi.framework</Import-Package>
                  <Embed-Dependency>*</Embed-Dependency>
                  <DynamicImport-Package>*</DynamicImport-Package>
                 </manifestEntries>
                </archive>
              </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.4</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.2.0</version>
            <type>jar</type>
        </dependency>
    </dependencies>
</project>


    其中用了maven-jar-plugin,通过这个plugin的Configuration/archive/manifest的配置,就可以很方便地设置Bundle所需的Manifest项,打包时会自动创建manifest.mf。

    当然以上只是最基础的部分,我们还可以基于Maven提供的Surefire插件做Bundle的单元测试,利用Maven的父项目来将一组相关联的Bundle项目组合成一个大的项目,还可以将Maven的repository当作OSGI的OBR(OSGI Bundle Repository),用于Bundle的部署发布方面。
分享到:
评论
5 楼 killko 2014-12-27  
zhicheng5375123 写道
为啥不用maven-bundle-plugin呢?

因为我觉得maven-jar-plugin更纯粹一点,我比较喜欢纯粹点的东西。
4 楼 zhicheng5375123 2014-09-03  
为啥不用maven-bundle-plugin呢?
3 楼 zyz251314 2013-02-04  
killko 写道
zyz251314 写道
其中用了maven-jar-plugin,通过这个plugin的Configuration/archive/manifest的配置,就可以很方便地设置Bundle所需的Manifest项,打包时会自动创建manifest.mf。


这样打包是没有问题,比如在eclipse下直接运行项目就没法跑了?

不了解eclipse直接运行项目的机制,难道它不是做好bundle再迗行?我这里提的方式,做出来的bundle并不特殊,应该在任何osgi framework下都是正常的。


你可以了解下Eclipse集成virgo插件的开发方式
2 楼 killko 2013-02-01  
zyz251314 写道
其中用了maven-jar-plugin,通过这个plugin的Configuration/archive/manifest的配置,就可以很方便地设置Bundle所需的Manifest项,打包时会自动创建manifest.mf。


这样打包是没有问题,比如在eclipse下直接运行项目就没法跑了?

不了解eclipse直接运行项目的机制,难道它不是做好bundle再迗行?我这里提的方式,做出来的bundle并不特殊,应该在任何osgi framework下都是正常的。
1 楼 zyz251314 2013-01-31  
其中用了maven-jar-plugin,通过这个plugin的Configuration/archive/manifest的配置,就可以很方便地设置Bundle所需的Manifest项,打包时会自动创建manifest.mf。


这样打包是没有问题,比如在eclipse下直接运行项目就没法跑了?

相关推荐

    构建基于Maven的OSGI

    在本篇文章中,我们将详细介绍如何使用Maven构建一个OSGi项目,包括项目的创建、容器的启动、Bundle的导入与创建等方面。 #### 开发环境 - Eclipse 3.6 或更高版本 - Maven - OSGi框架(例如Equinox或Felix) - ...

    maven+osgi

    3. Maven与OSGi的结合:在OSGi环境中,Maven可以帮助管理模块的依赖关系,将JAR文件打包为OSGi兼容的bundle。Maven的BND插件或Apache Felix Bundle Plugin就是用来将Maven项目转换为OSGi bundle的工具。通过这些插件...

    eclipse maven 打包bundle

    本篇文章将深入探讨如何使用Eclipse与Maven一起打包bundle,这在Java OSGi(Open Services Gateway Initiative)开发中尤为常见。 首先,我们需要了解OSGi,它是一种模块化系统,用于Java应用程序,允许动态发现和...

    osgi-bundle-hello-world:使用Maven的演示OSGI捆绑包

    标题中的“osgi-bundle-hello-world”是一个示例项目,展示了如何使用Maven构建一个OSGi(Open Services Gateway Initiative)捆绑包。OSGi是一种Java模块化系统,它允许开发者将应用程序分解为独立的、可重用的服务...

    Intellij 13下OSGi的Maven例子

    在IntelliJ IDEA中,我们可以通过Maven生命周期来构建、安装和部署这些OSGi Bundle到本地仓库或OSGi运行时。然后,我们可以在IDEA的OSGi运行时中启动和调试这些模块,观察服务的注册和消费过程。 至于压缩包中的...

    osgi开发jar包

    5. **打包工具**:为了方便创建和管理OSGi bundle,有一些工具可以帮助开发者,如Apache Maven的maven-bundle-plugin或Gradle的osgi plugin。这些工具能够自动生成满足OSGi规范的MANIFEST.MF,并将依赖关系正确地...

    OSGI 开发文档中文的

    8. **部署和管理**:如何在OSGI运行时环境(如Equinox或Felix)中部署和管理bundle,以及如何使用OSGI的命令行工具或图形用户界面进行操作。 9. **实战应用**:"OSGI实战.pdf"可能包含实际项目案例,演示如何在真实...

    blueprint-osgi-bundle:OSGi 示例

    **标题解析:** "blueprint-osgi-bundle:OSGi 示例" 指的是一个基于OSGi(Open Service Gateway Initiative)框架的示例项目,它使用了Blueprint服务容器来管理服务组件。Blueprint是Apache Felix项目中的一个子项目...

    maven jar包

    maven-bundle-plugin-1.0.0.jar maven-clean-plugin-2.4.1.jar maven-clean-plugin-2.5.jar maven-common-artifact-filters-1.3.jar maven-compat-3.2.1-sources.jar maven-compiler-plugin-2.5.1.jar maven-...

    OSGi崁入Servlet的配置步驟

    使用Maven或Gradle等构建工具,创建一个新的OSGi Bundle项目。确保在pom.xml或build.gradle文件中包含适当的OSGi依赖,例如Apache Felix或Equinox的Servlet API。 4. **编写Servlet类** 创建一个继承自`javax....

    Osgi的简单实现

    - 构建bundle:使用构建工具如Maven或Gradle,配置相应的Osgi插件来生成bundle JAR文件。 4. **Eclipse中的Osgi实现** 描述中提到的"简单用代码解释了过程"可能指的是通过Eclipse插件开发的过程。在Eclipse中,...

    OSGi in Practice 完整版

    为了方便开发OSGi bundle,可以使用以下工具: - **Eclipse Plugin Development Environment (PDE)**:Eclipse的插件开发环境提供了丰富的功能来支持OSGi开发。 - **Bnd**:这是一个用于构建和验证OSGi bundle的...

    基于OSGi的Web应用开发系列(全).pdf

    为了在OSGi环境中有效地开发,通常会使用一些工具,如Maven进行依赖管理和构建,Pax-construct和Pax-runner辅助构建OSGi应用,以及Eclipse作为IDE进行开发。Maven的使用可以简化项目结构、依赖管理和构建过程,但...

    Felix_OSGi实作

    在开发使用Felix的OSGi应用时,首先需要准备开发环境,这通常涉及到JDK、Maven和Felix这三个主要部分。JDK是Java Development Kit,是Java应用开发的必备工具。Maven则是项目管理工具,用于项目的构建、报告和文档...

    OSGI-Jetty示例,Java源码,很得劲

    2. **导入Jetty Bundle**:Jetty提供了专门的OSGI版本,可以在Maven仓库或官方网站找到。你需要把这些bundle添加到OSGI容器的启动配置中,确保它们在运行时被正确加载。 3. **创建Web应用**:创建一个标准的Java ...

    IntelliJ IDEA OSGI helloworld

    在IntelliJ IDEA中,我们需要使用OSGi插件如Bndtools或Apache Felix插件来创建OSGi Bundle。首先,创建一个新的Maven或Gradle项目,并在pom.xml或build.gradle文件中添加对应的OSGi依赖。 **3. 编写OSGi服务** ...

    很久之前的osgi整理

    标签提到“源码”和“工具”,这可能意味着内容包含了如何使用特定的IDE或构建工具(如Eclipse或Maven)进行OSGi开发,以及如何阅读和理解OSGi Bundle的源代码。 9. **EOFFICE.doc**: 压缩包中的文件名为EOFFICE...

    spring-osgi.jar及其依赖包

    1. **创建bundle项目**:使用如BndTools这样的工具,或者直接使用Maven或Gradle的OSGi插件,来设置bundle的MANIFEST.MF文件,定义bundle的导出和导入包。 2. **定义服务和组件**:使用DS或Spring的XML配置,声明...

    Spring OSGI 快速入门中文教程

    - **构建与运行**:使用Maven或Gradle构建Bundle,然后在OSGi运行时环境中启动。 通过阅读《Spring OSGi 入门.pdf》和实践samples中的示例,你可以逐步掌握如何在OSGi环境中使用Spring框架。理解并熟练运用Spring ...

Global site tag (gtag.js) - Google Analytics