【问题标题】:ClassNotFoundException when building with gradle and trying to use com.google.code.gson使用 gradle 构建并尝试使用 com.google.code.gson 时出现 ClassNotFoundException
【发布时间】:2017-02-01 00:07:42
【问题描述】:

我是 Java 项目和 gradle 的新手。我正在尝试使用 Google 的 GSON 来解析 JSON 字符串。

当我导航到 my-project-name/build/classes/main/ 时

我在运行时得到 ClassNotFoundException

$ java GetGroupMeMessages 

这是堆栈跟踪(这就是它的名称,对吗?):

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson
    at GetGroupMeMessages.main(GetGroupMeMessages.java:59)
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)
    ... 1 more

我的 build.gradle 文件如下所示:

apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.8
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'gscc-groupme-logs',
                   'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.6'
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

test {
    systemProperties 'property': 'value'
}

uploadArchives {
    repositories {
        flatDir {
            dirs 'repos'
        }
    }
}

我正在从命令行执行所有操作。 我的文件保存在 my-project-name/src/main/java/ 下

非常感谢任何帮助!我被困住了。

【问题讨论】:

  • 从控制台启动 java 时是否使用/设置了类路径?
  • 谢谢。是的。我现在又试了一次。我使用了一个包含 build/libs 和 build/classes/main 目录的类路径。我在这里看到了一个类似的问题(stackoverflow.com/questions/22911190/…)。我认为这可能是我的清单有问题。

标签: java gradle gson


【解决方案1】:

如果你想从命令行运行单个 java 文件,你需要在你的命令中使用 -cp jar_location 提供 gson jar 作为类路径。

如果你想运行构建 jar:

在您的配置中将依赖项从编译更改为运行时。

dependencies {
    runtime group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.6'
    runtime group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
    runtime group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

更改您的 jar 配置,如下所示:

jar {
    manifest {
    attributes(
            'Implementation-Title': 'gscc-groupme-logs',
            'Implementation-Version': version
            'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
            'Main-Class': 'GetGroupMeMessages'
    )        
    }
}

然后在创建 jar 之后使用 java -jar jarname 命令运行它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多