使用gradle构建并尝试使用com.google.code.gson

时间:2017-02-01 00:07:42

标签: java gradle gson

我是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 /

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

1 个答案:

答案 0 :(得分:1)

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

如果你想运行build 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命令运行它。