之前写了一个篇如何使用Spring提供的Maven Archetype来自动化创建一个Spring Osgi Bundle项目。而在实际的开发过程中,发现自己并不是很喜欢这中方式,总是觉得有些地方会失去控制。
举个很简单的例子,如果使用手动编辑MANIFEST.MF文件来维护Import-Package和Import-Bundle,那么需要注意一定要将Import-Bundle放在Import-Package之前,否则在使用mvn
org.apache.felix:maven-bundle-plugin:manifest时,无法正确的生成MANIFEST.MF文件。生成的
MANIFEST.MF文件中没有Import-Bundle项。
为了更加好的掌控项目,因此在实际开发过程中,我采用了手工创建和维护项目的方法。下面简单的说明一下创建项目的过程:
- 通过maven-archetype-quickstart创建一个Maven管理的项目。
$mvn archetype:generate -DarchetypeArtifactId=maven-archetype-quickstart
- 创建必需的文件与目录
$cd /path/to/your/project
$mkdir src/main/resources
$mkdir src/main/resources/META-INF
$mkdir src/main/resources/META-INF/spring
$touch src/main/resources/META-INF/MANIFEST.MF
- 编辑${your.project.path}/pom.xml文件
- 添加springsource的repository,参见How do I configure a Maven build to work with the repository?
<!-- ================================================ -->
<!-- Repository Configuration -->
<!-- ================================================ -->
<repositories>
<repository>
<id>com.springsource.repository.bundles.release</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
<repository>
<id>com.springsource.repository.libraries.release</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Library Releases</name>
<url>http://repository.springsource.com/maven/libraries/release</url>
</repository>
<repository>
<id>com.springsource.repository.libraries.external</id>
<name>SpringSource Enterprise Bundle Repository - External Library Releases</name>
<url>http://repository.springsource.com/maven/libraries/external</url>
</repository>
</repositories>
- 指定打包时需要使用的MANIFEST.MF,参见Adding OSGi metadata to existing projects without changing the packaging type
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 完成
分享到:
相关推荐
1. Spring DM是Spring对OSGi服务的扩展,提供了一种声明式的方式来管理OSGi Bundle中的Spring应用上下文。它允许开发者使用熟悉的Spring配置来定义服务和引用,简化了OSGi环境下的应用开发。 2. 自动化服务注册和...
2. 创建Spring OSGi Bundle:使用Spring的osgibundle.xml配置文件,定义bundle的元数据和导出/导入的包。也可以使用Spring的工具,如SpringSource Tool Suite,来简化这个过程。 3. 配置Spring Bean:在bundle中...
创建Spring OSGi Bundle** - **定义Bundle Classpath**:指定Bundle所需的类路径。 - **编写Spring配置**:创建Spring配置文件,定义bean和服务。 - **暴露服务**:使用@Service或@Component注解标记服务,通过...
在OSGI环境中,我们可以创建专门处理用户管理的服务,这些服务可以作为独立的bundle发布和消费。例如,`online-1.0.0.jar`可能就是一个实现了用户管理功能的bundle,它提供了API供其他bundle调用,以实现用户的增删...
在实际应用中,创建Spring OSGi bundle通常涉及以下步骤: 1. **创建bundle项目**:使用如BndTools这样的工具,或者直接使用Maven或Gradle的OSGi插件,来设置bundle的MANIFEST.MF文件,定义bundle的导出和导入包。 ...
- 提供的示例程序可能包含了如何创建和配置Spring OSGi bundle,以及如何在OSGi容器中运行和交互的示例代码。 - 通过学习这些示例,开发者可以快速掌握Spring OSGi的基本用法和最佳实践。 8. **Spring OSGi的应用...
### Spring OSGi 中文知识点概述 #### 一、Spring框架与OSGi的结合 **Spring框架**是一个领先的全栈Java/JEE应用框架,它提供了一个轻量级的容器,支持依赖注入、面向切面编程(AOP)以及可插拔的服务抽象等功能。这...
4. **创建Spring Extension Factory**:在Eclipse RCP中,你需要创建一个SpringExtensionFactory,这是一个特殊的工厂类,负责从OSGi服务中获取Spring配置并实例化Bean。 5. **注册OSGi服务**:将...
在Java世界中,OSGi(Open Services Gateway Initiative)是一种模块化系统,它允许开发者创建可独立更新和依赖管理的模块,即Bundle。Eclipse的Equinox是实现OSGi规范的一个流行实现。这篇博文将深入探讨如何使用...
创建SpringDM Bundle通常涉及以下步骤: - 引入必要的OSGi和SpringDM库。 - 创建一个名为MANIFEST.MF的元数据文件,声明Bundle的元信息,如Bundle-SymbolicName、Bundle-Version等,并指定Bundle-ClassPath和Import-...
通过这个例子,学习者可以了解OSGi Bundle的结构,如何在EQUINOX上部署和管理它们,以及如何使用Eclipse作为开发工具来创建和调试OSGi应用。这涉及到理解Bundle的生命周期、MANIFEST.MF文件的编写、Eclipse插件的...
- **Spring Bundle Context**:它是Spring与OSGi之间的桥梁,允许Spring应用访问OSGi服务并参与OSGi事件处理。 5. **使用场景** Spring OSGi适用于大型企业级应用,尤其是那些需要高可扩展性和动态部署能力的系统...
《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自执笔,并得到了Eclipse官方技术社区的强烈推荐,权威性毋庸置疑!内容全面,系统讲解了利用Eclipse RCP和Spring OSGi开发大规模Java应用的...
**Spring OSGi 入门** Spring OSGi 是 Spring 框架与开放服务网关规范(OSGi)的结合,它为基于 Java 的应用程序...通过理解 OSGi 的核心概念和 Spring OSGi 的集成方式,我们可以创建更灵活、更易于维护的软件系统。
1. 创建OSGI bundle,包含Spring配置和Mybatis配置。 2. 实现OSGI服务接口,例如,为Spring的Bean和Mybatis的SqlSessionFactory注册服务。 3. 配置Pax Web或类似的Servlet容器,以支持OSGI bundle中的Spring MVC应用...
在OSGi框架中,你可以通过实现`org.osgi.framework.BundleListener`接口来创建一个bundle改变监听器。这个接口定义了一个方法`bundleChanged(BundleEvent event)`,每当bundle的状态发生变化时,OSGi框架就会调用这...
2. **打包Spring应用为OSGi bundle**:将Spring应用的类和依赖打包成遵循OSGi规范的bundle,每个bundle代表一个模块。 3. **声明服务和依赖**:在MANIFEST.MF文件中声明bundle提供的服务和依赖其他服务。 4. **使用...
Spring OSGi将bundle与应用上下文关联起来:每个激活的bundle可以包含一个Spring应用上下文,负责在bundle内创建、配置、组装和装饰对象(bean)。部分bean可以被导出为OSGi服务,供其他bundle使用,同时,bean也...
4. **依赖注入(DI)**:Spring的DI特性可以在OSGI环境中工作,使得bundle之间的依赖关系可以通过配置来管理,而不是硬编码。这样增加了代码的可测试性和可维护性。 5. **动态部署**:OSGI环境支持动态部署和更新,...