[ https://issues.apache.org/jira/browse/FELIX-6198?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guillaume Nodet updated FELIX-6198: ----------------------------------- Summary: Problem with embeding elasticsearch dependency (was: Problem with ebmeding elasticsearch dependency) > Problem with embeding elasticsearch dependency > ---------------------------------------------- > > Key: FELIX-6198 > URL: https://issues.apache.org/jira/browse/FELIX-6198 > Project: Felix > Issue Type: Bug > Components: Maven Bundle Plugin > Affects Versions: maven-bundle-plugin-4.2.1 > Environment: Adobe Experience Manager 6.4, Java 1.8 (tried on 9 and > 11 as well), elasticsearch version 7.4.1 > Reporter: Tadija > Priority: Major > Labels: newbie > Attachments: Screenshot 2019-10-30 at 09.54.56.png, Screenshot > 2019-11-01 at 20.36.09.png > > > I am trying to embed the following dependency and it's transitive > dependencies: > > {code:java} > <dependency> > <groupId>org.elasticsearch.client</groupId> > <artifactId>elasticsearch-rest-high-level-client</artifactId> > </dependency> > <dependency> > <groupId>org.elasticsearch</groupId> > <artifactId>elasticsearch</artifactId> > </dependency> > <dependency> > <groupId>org.elasticsearch.client</groupId> > <artifactId>elasticsearch-rest-client</artifactId> > </dependency>{code} > > I am working with AEM 6.4v and tried maven-bundle-plugin versions 2.1.0 and > 4.2.1. > With first version, I can not build project due to the following error: > Classes found in the wrong directory: > elasticsearch/META-INF/versions/9/org/elasticsearch/monitor/jvm > I've also tried two options of maven-bundle plugin which are showed bellow: > With maven hade plugin: > > {code:java} > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-shade-plugin</artifactId> > <version>1.1</version> > <executions> > <execution> > <phase>package</phase> > <goals> > <goal>shade</goal> > </goals> > <configuration> > <artifactSet> > <includes> > > <include>org.elasticsearch.client:elasticsearch-rest-high-level-client</include> > <include>org.elasticsearch:elasticsearch</include> > > <include>org.elasticsearch.client:elasticsearch-rest-client</include> > </includes> > </artifactSet> > <filters> > <filter> > > <artifact>org.elasticsearch.client:elasticsearch-rest-high-level-client</artifact> > <excludes> > <exclude>**</exclude> > </excludes> > </filter> > <filter> > <artifact>org.elasticsearch:elasticsearch</artifact> > <excludes> > <exclude>**</exclude> > </excludes> > </filter> > <filter> > > <artifact>org.elasticsearch.client:elasticsearch-rest-client</artifact> > <excludes> > <exclude>**</exclude> > </excludes> > </filter> > </filters> > > <promoteTransitiveDependencies>true</promoteTransitiveDependencies> > <createDependencyReducedPom>true</createDependencyReducedPom> > </configuration> > </execution> > </executions> > </plugin> > <plugin> > <groupId>org.apache.felix</groupId> > <artifactId>maven-bundle-plugin</artifactId> > <version>4.2.1</version> > <extensions>true</extensions> > <configuration> > <instructions> > <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> > <Export-Package>we.retail.core.model*</Export-Package> > <Import-Package> *;resolution:=optional </Import-Package> > <Private-Package> we.retail.core* </Private-Package> > <Sling-Model-Packages> > we.retail.core.model > </Sling-Model-Packages> > > <!--<_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>--> > > <_removeheaders>Ignore-Package,Include-Resource,Private-Package,Embed-Dependency</_removeheaders> > </instructions> > <unpackBundle>true</unpackBundle> > </configuration> > </plugin>{code} > > Second without maven shade plugin: > > {code:java} > <plugin> > <groupId>org.apache.felix</groupId> > <artifactId>maven-bundle-plugin</artifactId> > <extensions>true</extensions> > <configuration> > <instructions> > <Embed-Dependency> > org.apache.servicemix.bundles.solr-solrj, noggit, > *elasticsearch*, rank-eval-client, lang-mustache-client, > httpasyncclient, mapper-extras-client, parent-join-client, > aggs-matrix-stats-client > </Embed-Dependency> > <Embed-Transitive>true</Embed-Transitive> > <Embed-Directory>OSGI-INF/lib</Embed-Directory> > <Export-Package>we.retail.core.model*</Export-Package> > <Import-Package> > *;resolution:=optional > </Import-Package> > <Private-Package> > we.retail.core* > </Private-Package> > <Sling-Model-Packages> > we.retail.core.model > </Sling-Model-Packages> > </instructions> > </configuration> > </plugin> > <plugin> > <groupId>org.apache.maven.plugins</groupId> > <artifactId>maven-javadoc-plugin</artifactId> > <configuration> > <excludePackageNames> > *.impl > </excludePackageNames> > </configuration> > </plugin> > {code} > Dependencies: > {code:java} > <!-- Elasticsearch --> > <dependency> > <groupId>org.elasticsearch.client</groupId> > <artifactId>elasticsearch-rest-high-level-client</artifactId> > <version>7.4.1</version> > </dependency> > <dependency> > <groupId>org.elasticsearch</groupId> > <artifactId>elasticsearch</artifactId> > <version>7.4.1</version> > </dependency> > <dependency> > <groupId>org.elasticsearch.client</groupId> > <artifactId>elasticsearch-rest-client</artifactId> > <version>7.4.1</version> > </dependency> > {code} > Also I got this warning all the time in IntelliJ - *The package > org.elasticsearch.client is inside a non-bundle dependency* on this code: > try (RestHighLevelClient client = new > RestHighLevelClient(RestClient.builder(new HttpHost(server, port, protocol),// > new HttpHost(server, secondPort, protocol))); ResourceResolver > resourceResolver = request.getResourceResolver()) > { > if (indexType.equalsIgnoreCase(PROP_INDEX_TYPE_INDEX)) > { > Session session = resourceResolver.adaptTo(Session.class); > XContentBuilder builder = this.elasticsearchService.crawlContent(session); > IndexRequest indexRequest = new IndexRequest(indexName); > indexRequest.id("2"); > try > { > indexRequest.source(builder); > IndexResponse indexResponse = client.index(indexRequest, > RequestOptions.DEFAULT); > writeResponse(indexResponse, response); > } > > *So problem is sometimes shown as NoClassDefinition for come of transitive > dependencies, and sometimes servlet returns 500 error if any of elasticsearch > imports are inside the code.* > Any idea/help will be appreciated. > Whis is done on > [we.retail|[https://github.com/Adobe-Marketing-Cloud/aem-sample-we-retail]] > project so it is easy replicable. You can see full code on the following > links: > [https://github.com/tadijam64/search-engines-comparison-on-we-retail/blob/elasticsearch-servlet-impl/core/pom.xml] > > and other version here: > [https://github.com/tadijam64/search-engines-comparison-on-we-retail/blob/elasticsearch-maven-shade-test/core/pom.xml] > > -- This message was sent by Atlassian Jira (v8.3.4#803005)