Problem extending bundle with custom library
piotrkot opened this issue · comments
There is a problem with extending the bootstrap connector bundle with custom library.
Steps to reproduce:
- Create a small custom library having just one class in it.
public final class Dummy {
public String print() {
return "I'm dummy";
}
}
or take any library that is not publicly available.
- Add the library to the connector under the new
lib
location, i.e.aem-translation-framework-bootstrap-connector/bundle/lib/dummy-1.0-SNAPSHOT.jar
- Add dependency to the bootstrap-connector.bundle pom file
<dependency>
<groupId>com.example.dummy</groupId>
<artifactId>dummy</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- Instruct maven to add the library into the bundle by adding configuration to the
maven-bundle-plugin
in bootstrap-connector.bundle pom file
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<!--
<Embed-Dependency>
artifactId1,
artifactId2;inline=true
</Embed-Dependency>
-->
<Export-Package>
com.adobe.granite.translation.connector.bootstrap.core
</Export-Package>
<Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
<Embed-Directory>lib</Embed-Directory>
<Embed-Transitive>true</Embed-Transitive>
</instructions>
</configuration>
</plugin>
It does not matter if the library is embedded or inlined since if doesn't work in both cases. (I prefer inlined)
-
Call the library from the code, for example in
BootstrapTranslationServiceImpl.java
addprivate Dummy dummy = new Dummy();
on line 63. -
Deploy the bundle to the AEM instance.
Problem: When creating translation project boostrap
name in no longer available on the Translation Provider list. And there is no errors in logs.
@piotrkot Please take a look at https://github.com/Adobe-Marketing-Cloud/aem-translation-framework-bootstrap-connector/tree/master/content/src/main/content/jcr_root/apps/bootstrap-connector/install. There is already a custom bundle that is provided to show how to extend the Bootstrap connector. The connector is simply a framework provided to show how the translation APIs work.
@sridharjayakumar Yes, I saw how the bootstrap-content includes the custom bundle for the bootstrap-bundle but I personally just don't find it right. Firstly, it requires to build a separated bundle from the custom library. Secondly, dependency required by the bootstrap-bundle is added in the bootstrap-content. Not relevant modules become relevant which contradicts my idea of single-responsibility principle. Thirdly, a bundle with custom library would have to be visible with its services exposed. This violates the restrictions set on the custom library.
Is your solution the only one available?