java - apache在创建JedisConfig对象时在运行时公共(public)ClassNotFoundException

标签 java gradle redis minecraft jedis

我正在为minecraft spigot 1.14.2构建一个插件,它可以访问redis缓存。我正在使用绝地武士客户端访问缓存。
每当我试图创建JedisPool时,都会发生以下错误:

[00:26:09] [Server thread/ERROR]: Could not load 'plugins/test.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:139) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:334) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:253) [spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at org.bukkit.craftbukkit.v1_14_R1.CraftServer.loadPlugins(CraftServer.java:350) [spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at net.minecraft.server.v1_14_R1.DedicatedServer.init(DedicatedServer.java:202) [spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:775) [spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig
    at java.lang.Class.forName0(Native Method) ~[?:?]
    at java.lang.Class.forName(Class.java:398) ~[?:?]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:59) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    ... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig
    at java.net.URLClassLoader.findClass(URLClassLoader.java:471) ~[?:?]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:135) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:81) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.lang.Class.forName0(Native Method) ~[?:?]
    at java.lang.Class.forName(Class.java:398) ~[?:?]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:59) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[spigot-1.14.4.jar:git-Spigot-798ea6a-b2bcde8]
    ... 6 more

我的Test.java
package pkg;

import redis.clients.jedis.*;

import org.bukkit.plugin.java.JavaPlugin;

public class Test extends JavaPlugin{

    @Override
    public void onEnable(){
        JedisPool cachePool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379);
        try (Jedis j = cachePool.getResource() ) {
            j.set("foo", "bar");
        }
        cachePool.close();
    }

    @Override
    public void onDisable(){}
}

因为这看起来像一个依赖性问题,我还将在这里包括我的build.gradle
apply plugin:'java'

sourceCompatibility = '1.11'
targetCompatibility = '1.11'

repositories {
    mavenCentral()

    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots'
    }

    maven {
        url "https://hub.spigotmc.org/nexus/content/repositories/snapshots"
    }
}

dependencies {
    compile "redis.clients:jedis:3.1.0"
    compile "org.spigotmc:spigot-api:1.14.2-R0.1-SNAPSHOT"
}

processResources {
    from "src/plugin.yml"
}

这发生在新安装的插口服务器上。此外,这个问题仅限于在插件中创建JedisPool的实例。我可以编写一个外部项目,这个项目没有spiget作为依赖项,创建一个JedisPool很好。是什么导致了这个问题?如果还有什么我可以提供的信息,请告诉我。

最佳答案

在依赖项中添加Apache Commons Pool
例如。

dependencies {
    compile "redis.clients:jedis:3.1.0"
    compile "org.apache.commons:commons-pool2:2.6.2"
    compile "org.spigotmc:spigot-api:1.14.2-R0.1-SNAPSHOT"
}

关于java - apache在创建JedisConfig对象时在运行时公共(public)ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57651886/

相关文章:

java - 用 Java 或 Python 从我的网络摄像头捕获单个图像

java - 错误 : Could not find or load main class - how to compile to jar by maven?

java - Android中如何设置图片目录名?

java - Redis:为使用@Cacheable 注释的方法设置不同的生存时间

python - 使用python redis时redis流长度限制不起作用

Java 打包约定 - 模型怎么样?

android - 使用隐藏的api构建Android项目的gradle:在某些构建环境中失败,而在其他构建环境中成功

gradle - 根据另一个内部模块发布库

android - 需要帮助理解 Gradle 构建错误

redis - Redis 是否会返回除批量字符串以外的任何内容的 RESP 数组?