这次我们需要将classpath中的jar发布成bundle。
我们在Main中找到main这个启动函数,同样可以发现loadSystemProperties这个配置加载函数,他负责加载config.properties中的felix一个配置属性。其中felix.auto.start.1是bundle物理路径的配置参数。如果我们想启动某一个bundle可以通过修改该属性值实现。现在我们要做的是自动让eclipse工程中classpath里面的jar发布为felix中的bundle。实现也是考虑修改felix.auto.start.1的值。所以我们在loadSystemProperties方法后面增加一些代码,如下:
// jar
String jarBundles = (String) props.get("felix.auto.start.1");
String[] classpathJars = System.getProperty("java.class.path").split(
";");
for (String location : classpathJars) {
if (!location.contains("test")) {
String jarName = location
.substring(location.lastIndexOf("\\") + 1);
if (jarName.indexOf("jar") > 0) {
if (jarName.contains("org.apache.felix.framework")) {
continue;
}
if (!jarBundles.contains(jarName)) {
location.replaceAll("/", "\\");
jarBundles = jarBundles + " file:" + location;
}
} else {
// 文件夹方式
File manifestFile = new File(location+ "/META-INF/Manifest.mf");
if (manifestFile.exists()) {
jarBundles = jarBundles + " reference:file:" + location;
}
}
}
}
props.setProperty("felix.auto.start.1", jarBundles);
现在我们可以将classpath中的jar和工程都发布为bundle啦。可以随便写一个测试用例。在main的pom.xml中添加一个依赖。启动完后ps一下你会发现这个符合bundle的依赖已经发布成bundle啦。
附上修改后的Main.java。
分享到:
相关推荐
- 创建一个名为MANIFEST.MF的元数据文件,声明Bundle的元信息,如Bundle-SymbolicName、Bundle-Version等,并指定Bundle-ClassPath和Import-Package来指示依赖的其他模块。 - 编写Spring配置文件,定义Bundle中的...
总的来说,OSGi与Felix的结合为Java开发者提供了一种强大而灵活的方式,以模块化的方式进行应用开发。通过动态管理服务和模块的生命周期,Felix允许应用在不停机的状态下进行更新和维护,这在需要高可用性和弹性的...
- **定义Bundle Classpath**:指定Bundle所需的类路径。 - **编写Spring配置**:创建Spring配置文件,定义bean和服务。 - **暴露服务**:使用@Service或@Component注解标记服务,通过Export-Package声明对外提供的包...
10. **Bundle-ClassPath**: 指定bundle中的类路径信息,可以包含多个条目,如主class目录及依赖的库。 #### 五、常见问题与解决方法 在学习OSGi的过程中可能会遇到一些常见的问题,比如编译错误。这些问题通常与...
- **Manifest Headers**: Populate the manifest file with appropriate headers such as `Bundle-SymbolicName`, `Bundle-Version`, `Export-Package`, and `Import-Package`. These headers define the bundle's ...
在项目中定义bundle的元数据,包括导出和导入的包,以及Bundle-ClassPath等。 接着,引入Spring框架。这通常需要添加Spring的jar文件到项目的类路径中,并在bundle的MANIFEST.MF文件中声明对Spring的依赖。如果使用...
4. **.classpath**:这是一个Eclipse项目文件,包含了项目的类路径信息,定义了源代码和库的位置,用于构建和运行Java项目。编辑此文件可以调整项目的依赖关系。 5. **.fatjar**:通常,".fatjar"或"uberjar"是一个...
3. **Apache Felix**:这是一个由Apache基金会支持的开源OSGi框架,为开发者提供了标准的服务和一些有趣的附加功能。 #### 编写第一个OSGi应用程序 下面将详细介绍如何使用Equinox框架开发一个简单的OSGi应用程序...
例如,Maven/Ivy用于依赖管理,JUnit用于单元测试,Felix/Maven Bundle Plugin用于OSGi应用程序的打包。 10. **构建文件结构** 一个标准的`build.xml`文件通常会有明确的结构,包括头部声明、属性定义、任务定义、...