Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >可运行jar中的ElasticSearch : lucene问题

可运行jar中的ElasticSearch : lucene问题
EN

Stack Overflow用户
提问于 2016-01-28 16:20:08
回答 4查看 2.4K关注 0票数 2

我正在尝试用maven创建一个胖的可执行jar,包括elasticsearch作为一个依赖项来创建一个运行的elasticsearch节点的TransportClient。在eclipse中,客户端可以很好地连接到节点,但是当我从整个项目创建一个jar并使用java -jar bla.jar运行它时,连接失败,并显示以下信息:

代码语言:javascript
运行
AI代码解释
复制
DEBUG - [Armor] adding address [{#transport#-1}{127.0.0.1}{127.0.0.1:9300}]
DEBUG - [Armor] connected to node [{#transport#-1}{127.0.0.1}{127.0.0.1:9300}]
INFO  - [Armor] failed to get node info for {#transport#-1}{127.0.0.1}{127.0.0.1:9300}, disconnecting...
 org.elasticsearch.transport.RemoteTransportException: [Failed to deserialize response of type [org.elasticsearch.action.admin.cluster.node.liveness.LivenessResponse]]
Caused by: org.elasticsearch.transport.TransportSerializationException: Failed to deserialize response of type [org.elasticsearch.action.admin.cluster.node.liveness.LivenessResponse]
  at org.elasticsearch.transport.netty.MessageChannelHandler.handleResponse(MessageChannelHandler.java:179) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:138) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_66-internal]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_66-internal]
  at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_66-internal]
...
Caused by: java.lang.IllegalArgumentException: An SPI class of type org.apache.lucene.codecs.PostingsFormat with name 'Lucene50' does not exist.  You need to add the corresponding JAR file supporting this SPI to your classpath.  The current     classpath supports the following names: [es090, completion090, XBloomFilter]
  at org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:109) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.apache.lucene.codecs.PostingsFormat.forName(PostingsFormat.java:112) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.common.lucene.Lucene.<clinit>(Lucene.java:68) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.Version.fromId(Version.java:508) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.Version.readVersion(Version.java:280) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.cluster.node.DiscoveryNode.readFrom(DiscoveryNode.java:327) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.cluster.node.DiscoveryNode.readNode(DiscoveryNode.java:310) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.action.admin.cluster.node.liveness.LivenessResponse.readFrom(LivenessResponse.java:52) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.transport.netty.MessageChannelHandler.handleResponse(MessageChannelHandler.java:177) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:138) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) ~[cmd-0.0.1-SNAPSHOT.jar:?]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_66-internal]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_66-internal]
  at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_66-internal]

An SPI class of type org.apache.lucene.codecs.PostingsFormat with name 'Lucene50' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath. The current classpath supports the following names: [es090, completion090, XBloomFilter]的根本原因。我读到了这一点,这基本上意味着我的最终jar包括来自各种lucene依赖项的同名清单文件,这些文件被彼此覆盖。我使用了maven-shade-plugin和一个清单资源转换器来解决这个问题,但是错误仍然存在:

代码语言:javascript
运行
AI代码解释
复制
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>de.test.cmd.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后我寻找不依赖lucene的elasticsearch jar,我只想创建一个用于通信的transportclient。没有这样的幸运,只有一个jar,包括lucene。如何将elasticsearch放入一个可运行的jar中?或者我应该将所有依赖项保存在jar之外的lib文件夹中?我不知道如何告诉maven这样做。

--

更新:当我从eclipse导出对话框中使用"Copy required libraries into a sub-folder it the jar“时,它可以工作。我让eclipse从中生成一个build.xml,但是我仍然想尝试使用maven来构建jar,或者包含依赖项,或者作为一个额外目录。

EN

回答 4

Stack Overflow用户

发布于 2016-07-28 09:48:29

您应该将下面的transformer标记添加到shade插件中。

<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>

票数 3
EN

Stack Overflow用户

发布于 2016-07-13 14:07:59

我也遇到过同样的问题,我发现在maven中,在项目的pom.xml中,在elasticsearch依赖之上显式地包含了lucene-core依赖。

代码语言:javascript
运行
AI代码解释
复制
<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>5.4.1</version>
 </dependency>
 <dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.2.0</version>
 </dependency>
票数 1
EN

Stack Overflow用户

发布于 2018-11-22 22:41:57

在我的例子中,它是由不正确的

META-INF/services/{org.apache.lucene.codecs.Codec, org.apache.lucene.codecs.PostingsFormat, org.apache.lucene.codecs.DocValuesFormat}

被错误的库覆盖。

我认为在汇编过程中,有多个库具有相同的文件,不正确的文件被覆盖。

只需打开正确的jar文件,并将相同的文件复制到您的资源文件夹中。我大部分时间都在工作;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35066597

复制
相关文章
idea中运行jar程序
前言:今天在学习大数据中的项目的时候遇到了jar包。我之前就有看到在jdk中是有很多的jar包的。请看图如下。jdk中jar包确实很多,怪不得我们的程序都得以来jdk才能运行。
用户10271432
2022/12/19
1K0
idea中运行jar程序
解决xshell关闭jar停止运行的问题
在项目文件夹下新建一个txt文件,名字随意 运行 nohup java -jar xxx.jar >./temp.txt 2>&1 &
许喜朝
2020/11/09
1.7K0
制作可自运行的jar可执行文件
今天看到有人把Java的jar包制作成一个可执行文件,于是乎我也试了一把,确实也挺简单的,记录一下。
kongxx
2018/11/09
1.6K0
开发:异常收集之 运行jar包的问题
在本地cmd环境测试通过,放到linux服务器 发现运行java -jar XXX 失败
执笔记忆的空白
2020/12/25
4410
关于lr调用jar在vuser中可以运行,但是controller中却报错的问题
如题,错误如下:javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found 查找了很多地方,没有找到原因,很偶然的在一个帖子里面发现了上述错误,虽然不是loadrunner的。但还是拿来试了试。居然解决了这个问题。 方法:在java vuser中的init中加上如下两句话: System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");         System.setProperty("javax.xml.parsers.SAXParserFactory","com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl");
流柯
2018/08/30
8780
elasticsearch - Lucene分片内部逻辑
在一个分片中(Lucene),数据(数据原文和倒排索引)以段为单位存储,只有成为段的数据才能被检索。
执生
2020/11/13
8640
elasticsearch - Lucene分片内部逻辑
如何直接运行jar包_怎么运行jar文件
nohup:不挂断地运行命令,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中
全栈程序员站长
2022/11/10
2.7K0
运行 jar 出现"中没有主清单属性"
在运行通过 “java -jar xxx.jar” 的时候, 报 “中没有主清单属性” 错误.
芥末鱿鱼
2022/05/05
7.2K0
windows 运行jar包 生成日志_jar包双击运行
然后修改文件的扩展名为 .bat 或 .cmd 两者在windows都是可以运行的
全栈程序员站长
2022/11/09
3K0
windows 运行jar包 生成日志_jar包双击运行
Lucene&Solr&ElasticSearch-面试题
Lucene是apache下的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。官网地址:https://lucene.apache.org/
java思维导图
2019/12/05
2.2K0
Lucene+Solr+ElasticSearch查询匹配优化
当我们在处理搜索业务时候,需求往往是灵活多变的,有时候我们需要精确匹配,有时候我们又需要全文检索,而有时候,我们又想匹配度高而且还能全文检索,这似乎是精确匹配和模糊匹配一个妥协的策略,没错这就是搜索引擎出现的目的,以往的数据库是没法解决这种问题的,数据库只能回答有,没有,存在,不存在,并不能在有和没有之间做一个完美的妥协,比如说能把最匹配最相关的结果放在topN,仅靠like模糊查询是解决不了这种问题的。 Apache Lucene这个强大的全文检索核心包,提供了搜索引擎的核心组件,通过相关性评分算法
我是攻城师
2018/05/14
1.3K0
springboot打包jar运行
修改pom.xml文件:  增加  <packaging>jar</packaging> 增加build配置:  <build>     <plugins>         <plugin>     
仙士可
2021/04/08
2.4K0
Centos后台运行jar
jar后台运行 nohup java -jar xx.jar >/dev/null & 此处的“>/dev/null”作用是将终端输出信息输出到空洞中,即不保存输出信息,若要查看输出信息需指定输出到那个文件,例如“>/xxx/yyy.out” ---- 关闭后台进程 先查看后台进程pid ps -aux 记住进程pid,然后kill命令关闭 kill [pid] 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pwc1996/article/de
庞小明
2018/07/06
1.9K0
怎么运行jar包
首先我们需要有一个Java环境,接着在命令行中使用java -jar命令即可。以下是基本操作的示例。
很酷的站长
2023/10/20
1.1K0
怎么运行jar包
Lucene、solr以及elasticsearch之间的区别和联系
Lucene是一套信息检索工具包,并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。而solr和elasticsearch都是基于该工具包做的一些封装。
wuweixiang
2018/08/14
4.1K0
Lucene、solr以及elasticsearch之间的区别和联系
双击运行 jar 文件
运行,但是总归是麻烦些,要是能双击直接打开岂不是很方便,下面我们就来一起看看怎么操作吧
攻城狮杰森
2022/06/03
2.6K0
双击运行 jar 文件
linux运行jar的几种方式
&表达的意思是在后台运行。这种方式可以避免打断后程序停止的问题,但是避免不了关闭当前终端后程序停止的问题。
Libertyyyyy
2022/10/25
2K0
Could not load codec 'Lucene54'. Did you forget to add lucene-backward-codecs.jar?
将lucene的版本更新到6.4.2之后,运行时出现了这个异常,在maven中央仓库搜了下“ lucene-backward-codecs”找到了
johnhuster的分享
2022/03/29
5250
Could not load codec 'Lucene54'.  Did you forget to add lucene-backward-codecs.jar?
windows中启动 java -jar 后台运行程序
第一种需要一直开着dos界面: java -jar jar文件路径 第二种无需一直开着dos界面: 1.新建my-service.bat文件,内容如下: @echo off  START "my-service" javaw -jar science-0.0.1-SNAPSHOT.jar 2.然后直接运行my-service.bat文件即可
Java架构师必看
2021/10/18
4.9K0
点击加载更多

相似问题

Elasticsearch lucene查询

12

Lucene到Elasticsearch

13

Elasticsearch或Lucene

25

ElasticSearch中复杂的Lucene查询

10

grafana中的Elasticsearch lucene查询

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文