当前位置: 首页 > 知识库问答 >
问题:

绝地武士ClassNotFound和NoClassDefFoundError

易波涛
2023-03-14

我为数据可视化工具开发了一个插件。现在我想在它里面使用redis。当我在另一个项目(不在我的插件中)中尝试下面的redis代码时,效果很好。

//Connecting to Redis server on localhost 
  Jedis jedis = new Jedis("localhost"); 
  System.out.println("Connection to server sucessfully"); 
  //check whether server is running or not 
  System.out.println("Server is running: "+jedis.ping()); 

但当我在插件中使用绝地武士时,我得到了由java引起的。lang.NoClassDefFoundError:redis/clients/jedis/jedis由java引起。lang.NoClassDefFoundError:redis/clients/jedis/jedis错误。为了把我的插件安装到这个数据可视化工具上。我需要创建一个jar文件,我这样做了,它在不添加jedit部分的情况下运行良好。

我正在使用IntelliJ Idea,我创建了一个工件,并从顶部菜单中的build-build artifact选项卡对其进行了构建id。我还在pom中添加了绝地jar文件作为依赖项。xml(这是一个maven项目),我从项目结构中将其添加为库,并从项目结构菜单的工件选项卡将jedis jar文件添加为提取目录和库。然后我将绝地jar文件添加到我的项目中。类路径文件如下:

    <classpathentry kind="src" path="src/main/resources/jedis-2.1.0-sources.jar" including="**/*.java"/>

所以当我打开我的jar文件时,我可以看到有绝地武士。“redis/clients/jedis”路径中的java文件。在我的jar文件的根路径中还有一个绝地jar文件。但即便如此,它也不起作用。它在运行时给出上述错误。我哪里做错了?

共有1个答案

金嘉
2023-03-14

经过长时间的研究和“实验”,我解决了这个问题。这是我添加pom.xml的部分,以便摆脱这个问题。我还使用“mvn包”命令创建jar文件,而不是从IntelliJ IDEA接口创建。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <downloadSources>true</downloadSources>
                <downloadJavadocs>false</downloadJavadocs>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.8.0_161</source>
                <target>1.8.0_161</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>App.CytoVisProject</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
 类似资料:
  • 根据我的理解,使用JOhm和Jedis,可以在Redis中存储/检索java类对象。我有一个问题是,JOhm是否也将java对象保存在内存中,以便下次需要该对象(与key相关联)时,从内存返回该对象,而不是每次都从Redis读取该对象?

  • 所以,我有两个应用程序使用绝地武士。它们都连接到同一台服务器,其中一个监听发布以检查是否写入了某些内容。好吧,经过大约10个小时的持续使用和装载,设置/获取/发布/订阅等,绝地武士们返回了破碎的管道。我不知道为什么,因为我在绝地武士中有超时到0的时间。有什么想法吗?

  • 我试图从java连接到JedisCluster(ElastiCache Redis)。但是我得到了集群中没有可达节点的JedisConnectionExcema。 这是我连接JedisCluster的代码 运行这个之后我得到的异常 我查过了 正如AWS文件中提到的,我得到的回复是连接的。 这里的问题是什么?为什么我不能使用java连接到JedisCluster? 注: 我用的是jedis版本2.9

  • 我们的应用程序使用并连接到,以下是我如何获得jedis资源: 这是我的绝地说唱者(统一资源管理): 是Jedis实例的容器,下面是我如何使用它: 请注意,可能非常大(例如可以达到最大8KB)。 每次我重启我们的应用程序,所有的redis连接都是正常的,但是几个小时后,异常出来了。频率变得越来越高,然后所有到Redis的连接都断开了,可以创建新的连接。 以下是我的配置: 异常堆栈跟踪:

  • 我有一个使用线程(实际上是Spark)和Redis(绝地)的Scala程序。我为我的Redis操作定义了一个,其中我为连接定义了一个。我需要每个线程打开一个到Redis的连接,并与之并行工作 连接对象: 当我用一根线的时候,效果很好。但当多个线程使用它时,我会出错。起初,我在每个线程中得到了,其中“4”是一个随机字符() 然后从我尝试设置和,因为我也看到了,有时是redis。客户。绝地武士。例外。

  • 在Redis缓存中,我有三把钥匙 1111-2222-4444 1111-2222-3333 1112-2222-3333 我有一个部分键1111,我想返回两个键1111-2222-4444,1111-2222-3333 我有以下代码 以及匹配部分密钥的方法 现在这个工作,但它看起来很笨重,可能有成千上万的键,通过搜索。我的问题是,有没有一种纯粹的redis方法来做到这一点。其中它只返回部分键匹配