を使用しているとき、私は私のコードは、"java.lang.NoClassDefFoundErrorが:COM/fasterxml /ジャクソン/データバインド/ ObjectMapper" のGradle
あるジャクソン2を使用してJavaオブジェクトにJSONを変換するための簡単なテストプログラムを書いています
package test;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URL;
public class UseJson{
public static void main(String[] args){
ObjectMapper mapper = new ObjectMapper();
try{
SomeClass obj = mapper.readValue(new URL("http://someurl"), SomeClass.class);
}
catch(Exception ex){
System.out.println(ex.toString());
}
}
}
そしてbuild.gradleファイル
repositories {
mavenCentral()
}
apply plugin: 'java'
dependencies{
compile('com.fasterxml.jackson.core:jackson-databind:2.8.6')
compile('com.fasterxml.jackson.core:jackson-core:2.8.6')
compile('com.fasterxml.jackson.core:jackson-annotations:2.8.6')
}
jar {
manifest {
attributes 'Main-Class': 'test.UseJson'
}
}
ですが、プログラム
を実行しようとしたとき、私は例外を取得していますjava -jar ./build/libs/JsonTest.jar
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
at test.UseJson.main(UseJson.java:10)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
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
関連記事java.lang.ClassNotFoundException/NoClassDefFoundError for com/fasterxml/jackson/databind/ObjectMapper with MavenおよびCorrect set of dependencies for using Jackson mapperは問題を解決しません。
編集:私は手動でのjavacと依存関係のjarファイルを使用してプログラムをコンパイルしようとしたとき は、それが働きました。問題は、gradleビルドファイルでなければなりません。
さて、Jarを実行しているときにクラスパスにJacksonを追加していないので、クラスパスでは使用できません。なぜそれはすべきだと思いますか?アプリケーションプラグインを使用して、クラスパスマニフェストエントリにリストされているすべての依存関係を持つ実行可能なjarファイルを生成し、開始スクリプトを含む必要なすべてを含むアプリケーションの配布を生成させます。 –
@JBNizetありがとう!私はまた、シャベルプラグインがウーバージャーを作ることを発見しました。アプリケーションプラグインのように、uber jarを作成するかzipファイルを作成する方が良いかどうかを知ることができますか? –
アプリケーションプラグインが優れています。 uber-jarはハックであり、多くの場合、人々はライブラリとしてuber jarを使用し始め、何も期待どおりに機能しないのか疑問に思う。 –