我在Maven中有一个非常简单的应用程序,它使用Apache Felix作为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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.installer</groupId>
<artifactId>bundle-installer</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>5.6.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
在主要类中,我只是通过其路径获取捆绑包 由Apache Felix安装它:
package com.example.installer;
import org.apache.felix.framework.Felix;
import org.osgi.framework.BundleException;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws BundleException {
Properties config = new Properties();
config.setProperty("org.osgi.framework.storage", "/Users/johndoe/plugins");
Felix framework = new Felix(config);
framework.start();
framework.getBundleContext().installBundle("file:/Users/johndoe/Desktop/bundle-example-0.0.0.1.jar");
framework.stop();
}
}
让我解释一下我想要实施的内容。如您所见,我已将Felix缓存目录更改为“/ Users / johndoe / plugins”,即我将以编程方式安装Felix。除了一件事,这段代码运行得很好。安装完成后,每个软件包都安装在 bundle0,bundle1,...,bundleN等这样的文件夹中。但我不喜欢这个,我希望每个包都按照符号名称安装在文件夹中,如:xmlreader,code-analyzer等。
不幸的是,通过在Felix配置属性中设置它是不可能的。但我希望应该有一些现成的解决方案,而不是发明轮子。
如何以正确的方式实现此功能?