Я пытаюсь использовать Java High Level Rest Client в Adobe Experience Manager для завершения проекта сравнения между поисковыми системами Lucene, Solr и Elasticsearch .
У меня проблемы с реализацией asticsearh . Вот код:
Зависимость в родительском pom.xml (то же самое определено в основном pom.xml)
<!-- Elasticseach dependencies -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.0</version>
</dependency>
Единственная строка кода, которую я использую, это из зависимостей выше
try (RestHighLevelClient client = new
RestHighLevelClient(RestClient.builder(new HttpHost(server, port,
protocol),
new HttpHost(server, secondPort, protocol)));)
{
}
catch (ElasticsearchException e)
{
LOG.error("Exception: " + e);
}
protocol = "http", server = "localhost", port = 9200, secondPort =9201
Я знаю, что обычно есть проблемы с версиями зависимостей, но в этом случае все они 7.4.0 . Кроме того ,asticsearch 7.4.0v работает локально на 3 узлах.
Этот проект выполняется на We.Retail проекте, поэтому его легко скопировать. Также весь код с этой ошибкой доступен здесь: https://github.com/tadijam64/search-engines-comparison-on-we-retail/tree/elasticsearch-integration AEM 6.4v.
Любая информация или идея приветствуется.
ОБНОВЛЕНИЕ Я пытался сдобавив следующее для встраивания этих зависимостей извне, поскольку они не являются зависимостями OSGi:
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-Dependency>org.apache.servicemix.bundles.solr-solrj, log4j, noggit, zookeeper,
elasticsearch-rest-high-level-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>
</plugins>
</build>
Ошибка остается. Я также попытался добавить его в «пакет экспорта», но ничего не помогает.
И по документации Elasticsearch все, что мне нужно для использования Elasticsearch, это
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.0</version>
</dependency>
но тогда NoClassDefFoundErrors происходит. Кажется, это проблема транзитивных зависимостей. Не уверен, но любая идея приветствуется.
Некоторые другие предложения можно найти здесь: https://forums.adobe.com/thread/2653586
Я также попытался добавить его транзитивные зависимости, такие как org.elasticsearch и org. asticsearch.client, но это не работает. Та же ошибка, просто другой класс.
AEM версия 6.4, Java версия: jdk1.8.0_191.jdk