У меня есть очень простое приложение в Maven, которое использует Apache Felix в качестве OSGi Framework.
Вот содержимое файла 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.Но я надеюсь, что должны быть некоторые готовые решения вместо изобретения колеса.
Как правильно реализовать эту функцию?