Mavenの依存関係でNoClassDefFoundErrorが発生する
質問
初めてMavenを使用するのですが、依存関係で困っています。
EclipseでMavenのプロジェクトを作成し、依存関係を追加したところ、問題なく動作していました。
しかし、コマンドラインから実行しようとすると。
$ mvn package # successfully completes
$ java -cp target/bil138_4-0.0.1-SNAPSHOT.jar tr.edu.hacettepe.cs.b21127113.bil138_4.App # NoClassDefFoundError for dependencies
依存関係をダウンロードし、ビルドに成功しましたが、実行しようとするとNoClassDefFoundErrorが発生します。
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonParseException
at tr.edu.hacettepe.cs.b21127113.bil138_4.db.DatabaseManager.<init>(DatabaseManager.java:16)
at tr.edu.hacettepe.cs.b21127113.bil138_4.db.DatabaseManager.<init>(DatabaseManager.java:22)
at tr.edu.hacettepe.cs.b21127113.bil138_4.App.main(App.java:10)
Caused by: java.lang.ClassNotFoundException: org.codehaus.jackson.JsonParseException
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 3 more
私のpom.xmlはこんな感じです。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>tr.edu.hacettepe.cs.b21127113</groupId>
<artifactId>bil138_4</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>bil138_4</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.6</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
誰か助けてください。
どのように解決するのですか?
<ブロッククオート実行しようとすると、NoClassDefFoundErrorが発生します。
どのように実行するのですか?mavenのクラスパスを正しくインポートせずに、eclipseで実行しようとしているのでしょう。以下を参照してください。 m2eclipse プラグインを参照してください。
maven の設定が正しいかどうかを確認するには、アプリを実行する際に 実行プラグイン を使って実行します。
mvn exec:java -D exec.mainClass=<your main class>
更新しました。
まず
exec:java
を実行したときのエラーについてですが、あなたのメインクラスは
tr.edu.hacettepe.cs.b21127113.bil138_4.App
. クラス名について話すときは、(ほとんど)常にドットで区切られます。単純なクラス名は、最後の部分だけです。
App
のようになります。完全修飾名は、完全なパッケージと単純なクラス名で、何かを実行するときにmavenやjavaに渡すものです。あなたが使おうとしていたのは、ソースファイルへのファイルシステムのパスです。これはまったく別物です。クラス名は一般に、ファイルシステム内のソースファイルと比較して、クラスパスで見つかるクラスファイルに直接変換されます。あなたのケースでは、問題のクラスファイルはおそらく次の場所にあるでしょう。
target/classes/tr/edu/hacettepe/cs/b21127113/bil138_4/App.class
にあるので、maven は
target/classes
にコンパイルされ、java は伝統的にパッケージングの各レベルにディレクトリを作成するからです。
あなたの元の問題は、単にJackson jarをクラスパスに置いていないことです。コマンド ラインから Java プログラムを実行する場合、どこからクラスをロードできるかを知らせるために、クラス パスを設定する必要があります。あなたは自分のjarを追加しましたが、他の必要なjarを追加していません。あなたのコメントから、手動でクラスパスを構築する方法を理解していないように思えます。要するに、クラスパスには、クラスファイルを含むディレクトリとクラスファイルを含むjarの2つがあります。jarを含むディレクトリは動作しません。クラスパスの構築の詳細については、" を参照してください。 クラスパスの設定 "を、そして ジャバ と javac ツールのドキュメントを参照してください。
あなたのクラスパスは少なくとも、改行がないことが必要でしょう。
target/bil138_4-0.0.1-SNAPSHOT.jar:
/home/utdemir/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.6/jackson-core-asl-1.9.6.jar:
/home/utdemir/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.6/jackson-mapper-asl-1.9.6.jar
Windowsのセパレータはセミコロン(;)であることに注意してください。
もっと早く気づかなかったことをお詫びします。問題はあなたの元の投稿に存在していたのですが、私はそれを見逃していました。
関連
-
型に解決できない エラー解決
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
java.sql.SQLException: 結果セットの開始前
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
maven レポート エラー 解決不可能な親POM
-
コンストラクタDate()が未定義である問題
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Mavenプロジェクトにローカルのjarファイルを追加する方法は?
-
[解決済み] Mavenに最新バージョンの依存関係を使用するように指示するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
型に解決できない エラー解決
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
switch case文のcaseの後の列挙定数は列挙型なし
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ