実行時に拡張機能をロードする機能を提供するために、ホスト アプリケーションで Apache Felix を使用しています。メカニズムはうまく機能しますが、特定の依存関係を含めると、バンドルの開始に関して非常に気まぐれな動作が発生します。たとえば、pom.xml で次を使用するとします。
<packaging>bundle</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.5.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Bundle-Version>1.0.0</Bundle-Version>
<Bundle-Activator>${pom.groupId}.activator.Activator</Bundle-Activator>
<Include-Resource>{maven-resources}, {maven-dependencies}</Include-Resource>
<Import-Package>*</Import-Package>
<Embed-Dependency>jackson-core</Embed-Dependency>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.2</version>
</dependency>
<dependency>
<groupId>co.ff36</groupId>
<artifactId>halo.core</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
すべてが完全に機能し、バンドルが登録されて開始されます。ただし、バンドルに含めるasync-http-client
と、登録されますが起動しません! 親が親ホスト アプリケーションによって依存関係を公開しているにもかかわらず、依存関係をバンドルに埋め込もうとしました。コンパイルされたバンドルの中を見ると、jar が含まれていますが、実際には起動しません。
追加してみました:
<dependency>
<groupId>com.ning</groupId>
<artifactId>async-http-client</artifactId>
<version>1.9.31</version>
</dependency>
および変更:
<Embed-Dependency>jackson-core, async-http-client</Embed-Dependency>
これらのオプションはどちらも機能しません。ホストアプリケーションでエラーが発生していません.一部のライブラリがこれを引き起こし、他のライブラリはそうではない理由を理解できません.