[Java]リリースするとNoClassDefFoundError

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
MoNoQLoREATOR
記事: 284
登録日時: 9年前
住所: 東京

[Java]リリースするとNoClassDefFoundError

#1

投稿記事 by MoNoQLoREATOR » 4年前

こんにちは。
jarファイルを実行するとNoClassDefFoundErrorというエラーが出てプログラムが終了してしまいます。
Eclipse上では正常に動作します。

Javaでjacksonというライブラリ(?)を使おうと試みました。

(1)このサイトに従ってjackson関係のjarファイルを3つともダウンロード(全て最新のものをダウンロード)しました。

(2)このサイトに従ってライブラリパスを3つとも追加しました。

(3)このようなコードを書きました。

コード:

package jackson_test;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public class Main {

	public static void main(String[] args) {
		ObjectMapper mapper = new ObjectMapper();
		mapper.enable(SerializationFeature.INDENT_OUTPUT);
		System.out.println("hello");

	}

}
(4)Eclipse上では正常に動作しています。

(5)このような設定でjarファイルをエクスポートしました。
1.jpg
1.jpg (33.36 KiB) 閲覧数: 1997 回
2.jpg
2.jpg (18.19 KiB) 閲覧数: 1997 回
3.png
3.png (41.19 KiB) 閲覧数: 1997 回
(6)実行しようとするとこのような結果になりました。

コード:

MoNoQLoREATOR-no-MacBook-Pro:Downloads monoqloreator$ ls
UDP_server.jar			jackson-databind-2.6.0.jar
jackson-annotations-2.6.0.jar	jackson_test.jar
jackson-core-2.5.0.jar
MoNoQLoREATOR-no-MacBook-Pro:Downloads monoqloreator$ java -cp ./jackson_test.jar jackson_test.Main
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
	at jackson_test.Main.main(Main.java:9)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 1 more
ちなみにjacksonを使わない場合、当然正常に動作します。

コード:

package jackson_test;

public class Main {

	public static void main(String[] args) {
		System.out.println("hello");

	}

}

コード:

MoNoQLoREATOR-no-MacBook-Pro:Downloads monoqloreator$ ls
UDP_server.jar			jackson-databind-2.6.0.jar
jackson-annotations-2.6.0.jar	jackson_test.jar
jackson-core-2.5.0.jar
MoNoQLoREATOR-no-MacBook-Pro:Downloads monoqloreator$ java -cp ./jackson_test.jar jackson_test.Main
hello

Java初心者にもわかりやすく教えていただけるとありがたいです。
よろしくお願いいたします。

アバター
MoNoQLoREATOR
記事: 284
登録日時: 9年前
住所: 東京

Re: [Java]リリースするとNoClassDefFoundError

#2

投稿記事 by MoNoQLoREATOR » 4年前

自己解決しました。

jarファイルをエクスポートするときに以下のような設定でエクスポートすれば
10.jpg
10.jpg (19.35 KiB) 閲覧数: 1938 回
11.jpg
11.jpg (27.1 KiB) 閲覧数: 1938 回
このようにして実行できました。

コード:

^CMoNoQLoREATOR-no-MacBook-Pro:Downloads monoqloreator$ ls
UDP_cliant.jar		UDP_server.jar		jackson_test.jar
MoNoQLoREATOR-no-MacBook-Pro:Downloads monoqloreator$ java -jar ./jackson_test.jar
hello

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: [Java]リリースするとNoClassDefFoundError

#3

投稿記事 by YuO » 4年前

MANIFEST.MFにクラスパスを含めることができるので,それで./jackson-core-2.5.0.jarなどを指定しておくとよいかと思います。

ちなみに,解決とされた方法の場合は,すべての依存jarを抱え込んだ上で,独自のエントリポイントから起動するようになるみたいです。
ref) [Java]Eclipseで実行可能JARファイルでエクスポートした時のディレクトリ構成の違い - daybreaksnow's diary

閉鎖

“C言語何でも質問掲示板” へ戻る