我正在尝试将Elasticsearch添加到我的项目中。我已经将必要的依赖项添加到了pom.xml文件中。当我运行服务器时,出现此错误:
Run Code Online (Sandbox Code Playgroud)java.lang.IllegalStateException: Failed to introspect Class [net.kzn.shoppingbackend.config.HibernateConfig] from ClassLoader [ParallelWebappClassLoader
请帮我解决这个问题。
我也试图在eclipse中找到elasticsearch.yml文件来配置节点,但是没有这样的文件。在哪里可以找到elasticsearch.yml文件。
HibernateConfig.java
package net.kzn.shoppingbackend.config;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableElasticsearchRepositories(basePackages = "net.kzn.shoppingbackend")
@ComponentScan(basePackages = { "net.kzn.shoppingbackend" })
@EnableTransactionManagement
public class HibernateConfig {
// change the below based on the DBMS you …Run Code Online (Sandbox Code Playgroud) 我正在将我们的项目从Java 8迁移到11。
第一步,我使用源和目标兼容性1.8对其进行编译,但尝试在openjdk-11上运行该应用程序。
在开发过程中,我们正在使用jetty:run目标来启动应用程序服务器。此目标失败,并出现以下错误:
Caused by: java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.<init>(CommonAnnotationBeanPostProcessor.java:621) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.lambda$buildResourceMetadata$0(CommonAnnotationBeanPostProcessor.java:383) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:713) ~[spring-core-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:365) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:350) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:298) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1043) ~[spring-beans-5.1.0.RELEASE.jar:5.1.0.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:550) ~[spring-beans-5.1.0.RELEASE.jar:5.1.0.RELEASE]
... 63 more
Run Code Online (Sandbox Code Playgroud)
我找到了@Resource来自错误版本的注释:
URL [jar:file:[...]/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/javax/annotation/Resource.class]
URL [jar:file:[...]/Applications/apache-maven-3.5.4/lib/jsr250-api-1.0.jar!/javax/annotation/Resource.class]
Run Code Online (Sandbox Code Playgroud)
看来maven正在将插件类路径放到/ lib /文件夹中的所有库
我猜想当我在jdk 1.8上运行它时,@Resource来自jdk 的注释具有优先权(因为我以前从未见过此错误),但是情况不再如此(因为jdk11中不再包含此注释)。
我有什么选择摆脱这个旧阶级?
(我可以从maven安装中升级lib,但是我更愿意保留它作为最后的手段,这要求每个从事该项目的人都要调整其maven安装)。
编辑:jetty:run-forked目标也很好,但是有了这个目标,我无法保留<webApp>插件的配置部分。
这似乎确实是一个Maven类路径隔离问题。