java - 未找到 Gson 类

标签 java gradle gson

我有 gradle.build 文件,我在其中获取 Gson 库。所以,问题是:gradle下载gson.jar还是我需要手动下载?

这是我的build.gradle:

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.code.gson:gson:2.8.2'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

但是执行以下代码后失败,因为它找不到Gson:

private static class StoreHandler implements HttpHandler {
        Gson gson = new Gson();

        @Override
        public void handle(HttpExchange httpExchange) throws IOException {
            String data = "hi!";
            httpExchange.getResponseBody().write(gson.toJson(data).getBytes());
        }
    }

堆栈跟踪如下(ClassNotFoundException:com.google.gson.Gson):

/usr/lib/jvm/java-8-oracle/bin/java -Didea.launcher.port=7533 -Didea.launcher.bin.path=/home/nazariy/idea/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar:/usr/lib/jvm/java-8-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/jfxrt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-8-oracle/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-8-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jce.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfxswt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar:/usr/lib/jvm/java-8-oracle/jre/lib/management-agent.jar:/usr/lib/jvm/java-8-oracle/jre/lib/plugin.jar:/usr/lib/jvm/java-8-oracle/jre/lib/resources.jar:/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:/home/nazariy/Desktop/g/preproduction_practice/store/build/classes/java/main:/home/nazariy/idea/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain com.epam.moshenskyi.server.MainServer
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson
    at com.epam.moshenskyi.server.http.HttpServerImpl$StoreHandler.<init>(HttpServerImpl.java:31)
    at com.epam.moshenskyi.server.http.HttpServerImpl$StoreHandler.<init>(HttpServerImpl.java:30)
    at com.epam.moshenskyi.server.http.HttpServerImpl.run(HttpServerImpl.java:22)
    at com.epam.moshenskyi.server.MainServer.main(MainServer.java:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: com.google.gson.Gson
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 9 more

更新: 如果我从一开始就重新创建项目添加 Gson 依赖项,则一切正常并且 Gson 可以工作,但是如果我向现有项目添加新的依赖项,则会抛出 ClassNotFound。也许它无法用我的项目重新创建 jar 文件并将 Gson 放入其中?

最佳答案

根据您工作的环境,仅向 build.gradle 添加依赖项可能会(不会)由 IDE 自动处理。请尝试从命令行运行 gradle build - 它应该在那里工作,假设您在源代码中导入没有问题。

使用控制台提供的输出进行编辑后,现在很清楚了 - 您的类路径不包含 gradle 下载的依赖项。您需要将它们添加到类路径中。

关于java - 未找到 Gson 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47583342/

相关文章:

java - Gson 到 json 字符串转换

java - Gson 崩溃并出现 Failed to invoke protected java.text.NumberFormat() with no args 错误

java 编译器说这个异常永远不会在相应的 try 语句的主体中抛出 - 但它_is_ 抛出

java - 标记/注释可优化代码的标准方法?

methods - 组织 Gradle 构建逻辑的任务或方法之间的最佳选择是什么?

java - (Gson) JSON 到包含 ArrayList<Class> 的 Java 对象

java - Spring 与 Callable 异步如何工作以及我不明白的地方?

java - 从数据库读取数据并存储在数组列表中,但数组列表显示为空

android - 错误:(31,0)未找到Gradle DSL方法: 'targetSdkVersion()'

gradle - 尝试应用到其他项目时找不到独立的Kotlin Gradle插件