java Elasticsearch 7.8和Magnolia 6.2。十、
我想使用最新的elasticsearch版本(7.8.0)和最新的Mgnl(CE)版本(目前为6.2.2)。在一些较老的项目中,他们经常使用弹性版本<;3.6对于所有api调用(如搜索/索引查询),它们使用Elastic的旧传输客户端。该客户机将被elastic的v8删除,并将被elastic的其余高级客户机Api替换
在我的测试中,我通过mvn原型生成使用了一个空白的mgnl 6.2.2,并使用一个虚拟页面和虚拟组件从mgnl设置了一个简单的模块。为了测试结果,我修改了该虚拟对象,将以下代码段作为组件模型调用
我的模型:
package com.test.model;
import javax.jcr.Node;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import info.magnolia.rendering.model.RenderingModel;
import info.magnolia.rendering.model.RenderingModelImpl;
import info.magnolia.rendering.template.TemplateDefinition;
public class TestModel extends RenderingModelImpl<TemplateDefinition>{
public TestModel(Node content, TemplateDefinition definition, RenderingModel<?> parent) {
super(content, definition, parent);
}
public void init( ) {
SearchRequest test = new SearchRequest();
SearchSourceBuilder testSource = new SearchSourceBuilder();
test.source(testSource);
System.out.println("test done");
}
}
以下是我的pom:
测试模块:
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.test</groupId>
<artifactId>mgnl</artifactId>
<version>1</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>mgnl-web</artifactId>
<packaging>jar</packaging>
<name>mgnl-web Magnolia Module</name>
<!-- <description>Please uncomment and fill in ...</description> -->
<properties>
<magnoliaBundleVersion>6.2.2</magnoliaBundleVersion>
<javaVersion>1.8</javaVersion>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>info.magnolia.bundle</groupId>
<artifactId>magnolia-bundle-parent</artifactId>
<version>${magnoliaBundleVersion}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>info.magnolia</groupId>
<artifactId>magnolia-rendering</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.lucene</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
<dependency>
<groupId>info.magnolia</groupId>
<artifactId>magnolia-core</artifactId>
</dependency>
<!-- TEST -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${javaVersion}</source>
<target>${javaVersion}</target>
</configuration>
</plugin>
</plugins>
<!-- default resources configuration which will filter the module descriptor -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>META-INF/magnolia/*</include>
</includes>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>magnolia.public</id>
<url>https://nexus.magnolia-cms.com/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<!-- IF YOU NEED MODULES FROM THE ENTERPRISE VERSION, UNCOMMENT THE FOLLOWING
REPOSITORY -->
<!-- <repository> <id>magnolia.enterprise.releases</id> <url>https://nexus.magnolia-cms.com/content/repositories/magnolia.enterprise.releases</url>
<snapshots> <enabled>false</enabled> </snapshots> </repository> -->
<repository>
<id>vaadin-addons</id>
<url>https://maven.vaadin.com/vaadin-addons</url>
</repository>
</repositories>
</project>
父pom(通过mgnl mvn原型的非接触式生成):
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>mgnl</artifactId>
<name>mgnl (parent pom)</name>
<version>1</version>
<packaging>pom</packaging>
<properties>
<magnoliaBundleVersion>6.2.2</magnoliaBundleVersion>
<javaVersion>1.8</javaVersion>
</properties>
<!-- Fill the following in, so you can use the release plugin -->
<scm>
<connection />
<developerConnection />
<url />
</scm>
<dependencyManagement>
<dependencies>
<!-- Option A -->
<!-- Importing dependencyManagement of CE bundle. -->
<dependency>
<groupId>info.magnolia.bundle</groupId>
<artifactId>magnolia-bundle-parent</artifactId>
<version>${magnoliaBundleVersion}</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>org.apache.lucene</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Option B -->
<!-- If you want to use the DX CORE. -->
<!-- <dependency> <groupId>info.magnolia.dx</groupId> <artifactId>magnolia-dx-core-parent</artifactId>
<version>${magnoliaBundleVersion}</version> <type>pom</type> <scope>import</scope>
</dependency> -->
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${javaVersion}</source>
<target>${javaVersion}</target>
</configuration>
</plugin>
</plugins>
<!-- default resources configuration which will filter your module descriptors -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
<includes>
<include>META-INF/magnolia/*</include>
</includes>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>magnolia.public</id>
<url>https://nexus.magnolia-cms.com/content/groups/public</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<!-- IF YOU NEED MODULES FROM THE ENTERPRISE VERSION, UNCOMMENT THE FOLLOWING
REPOSITORY -->
<!-- <repository> <id>magnolia.enterprise.releases</id> <url>https://nexus.magnolia-cms.com/content/repositories/magnolia.enterprise.releases</url>
<snapshots> <enabled>false</enabled> </snapshots> </repository> -->
<repository>
<id>vaadin-addons</id>
<url>https://maven.vaadin.com/vaadin-addons</url>
</repository>
</repositories>
<modules>
<module>mgnl-webapp</module>
<module>mgnl-web</module>
</modules>
</project>
如果我尝试使用SearchSourceBuilder设置一个简单的SearchRequest,就像在TestModel中编写的那样,我会遇到以下异常:
Caused by: java.lang.NoSuchFieldError: LATEST
at org.elasticsearch.Version.<clinit>(Version.java:59)
at org.elasticsearch.common.logging.DeprecationLogger.<clinit>(DeprecationLogger.java:143)
at org.elasticsearch.search.builder.SearchSourceBuilder.<clinit>(SearchSourceBuilder.java:83)
at com.test.model.TestModel.init(TestModel.java:20)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45009)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45012)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1505)
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:72)
在阅读了一些论坛后,我注意到如果lucene core有不同的版本,就会出现这种情况,因此我找出了哪些版本提供了:
mvn dependency:tree -Dverbose -Dincludes=org.apache.lucene
并得到如下结果:
[INFO] -------------------------< com.test:mgnl-web >--------------------------
[INFO] Building mgnl-web Magnolia Module 1 [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ mgnl-web ---
[INFO] com.test:mgnl-web:jar:1
[INFO] +- org.elasticsearch:elasticsearch:jar:7.8.0:compile
[INFO] | +- org.apache.lucene:lucene-core:jar:3.6.0:compile
[INFO] | +- org.apache.lucene:lucene-analyzers-common:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-backward-codecs:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-grouping:jar:8.5.1:compile
[INFO] | | +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | | \- (org.apache.lucene:lucene-queries:jar:8.5.1:compile - omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-highlighter:jar:8.5.1:compile
[INFO] | | +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | | +- (org.apache.lucene:lucene-memory:jar:8.5.1:compile - omitted for duplicate)
[INFO] | | \- (org.apache.lucene:lucene-queries:jar:8.5.1:compile - omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-join:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-memory:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-misc:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-queries:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-queryparser:jar:8.5.1:compile
[INFO] | | +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | | +- (org.apache.lucene:lucene-queries:jar:8.5.1:compile - omitted for duplicate)
[INFO] | | \- (org.apache.lucene:lucene-sandbox:jar:8.5.1:compile - omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-sandbox:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-spatial-extras:jar:8.5.1:compile
[INFO] | | +- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | | \- (org.apache.lucene:lucene-spatial3d:jar:8.5.1:compile - omitted for duplicate)
[INFO] | +- org.apache.lucene:lucene-spatial3d:jar:8.5.1:compile
[INFO] | | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] | \- org.apache.lucene:lucene-suggest:jar:8.5.1:compile
[INFO] | +- (org.apache.lucene:lucene-analyzers-common:jar:8.5.1:compile - omitted for duplicate)
[INFO] | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] \- info.magnolia:magnolia-core:jar:6.2.2:compile
[INFO] +- org.apache.jackrabbit:jackrabbit-core:jar:2.20.0:compile
[INFO] | \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
[INFO] \- (org.apache.lucene:lucene-core:jar:3.6.0:compile - version managed from 8.5.1; omitted for duplicate)
如上所示,依赖项mgnl核心包含lucene核心v3。6来自jackrabbit core 2.20.0
如果我试图排除lucene v3。6且仅包括elasticsearch v7中的一个。8在上述我的测试模块中进行以下pom更改:
<dependencies>
<dependency>
<groupId>info.magnolia</groupId>
<artifactId>magnolia-rendering</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
<dependency>
<groupId>info.magnolia</groupId>
<artifactId>magnolia-core</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.lucene</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- TEST -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
将发生以下例外情况:
java.lang.IllegalAccessError: class org.apache.jackrabbit.core.query.lucene.JackrabbitAnalyzer tried to access protected method org.apache.lucene.analysis.StopwordAnalyzerBase.<init>(Lorg/apache/lucene/util/Version;Ljava/util/Set;)V (org.apache.jackrabbit.core.query.lucene.JackrabbitAnalyzer and org.apache.lucene.analysis.StopwordAnalyzerBase are in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @479f2dc2)
at org.apache.jackrabbit.core.query.lucene.JackrabbitAnalyzer.<clinit>(JackrabbitAnalyzer.java:46) ~[jackrabbit-core-2.20.0.jar:2.20.0]
at org.apache.jackrabbit.core.query.lucene.SearchIndex.<init>(SearchIndex.java:232) ~[jackrabbit-core-2.20.0.jar:2.20.0]
at info.magnolia.jackrabbit.lucene.SearchIndex.<init>(SearchIndex.java:67) ~[magnolia-core-6.2.2.jar:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.__newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45009) ~[?:?]
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45012) ~[?:?]
at java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[?:?]
at java.lang.Class.newInstance(Class.java:584) ~[?:?]
在阅读了一些线程之后,我注意到这是由于带有jackrabbit@h2db:jackrabbit-bundle-h2-search的mgnl repo conf的标准配置造成的。xml,用于设置使用jackrabbit的searchindex@org的jcr存储库的searchindex。阿帕奇。大野兔。果心查询卢森。搜索索引
我花了很多时间在不禁用Searchindex的情况下修复它。有人知道如何解决这个问题来运行magnolia 6.2吗。x与Elastic的新Rest高级客户端
问候这么久,希望任何人都能帮忙:)
注意:对于原型生成@example,我使用以下命令进行设置:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -DarchetypeCatalog=https://nexus.magnolia-cms.com/content/groups/public/
共 (0) 个答案