2017-02-01 50 views
1

私はJavaプロジェクトとgradleを初めて使いました。 GoogleのGSONを使用してJSON文字列を解析しようとしています。ClassNotFoundException:gradleでビルドし、com.google.code.gsonを使用しようとしたとき

私は/

メイン/私のプロジェクト名/ビルド/クラスに移動すると、私はここで

$ java GetGroupMeMessages 

を実行したときに、私はClassNotFoundExceptionが取得するには、スタックトレースである(それはそれは、右と呼ばれるものです?):

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' 
     } 
    } 
} 

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ファイルは次のようになります

私はコマンドラインからすべてをやっています。 私のファイルはmy-project-name/src/main/java/

の下に保存されています

何か助けがありがとう!ハマった。

+1

コンソールからjavaを起動するときに/ classpathを設定しましたか?おかげさまで – iMysak

+0

うん私はもう一度やり直しました。私はbuild/libsとbuild/classes/mainディレクトリを含むクラスパスを使用しました。私はここで同様の質問を見ました(http://stackoverflow.com/questions/22911190/gradle-build-dependancy-throwing-classnotfoundexception)。私はそれが私のマニフェストの問題かもしれないと思う。 – thias

答えて

0

コマンドラインから単一の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コマンドを使用して、それを実行します。

関連する問題