なぜ私はこの映画に影響をうけました、NoClassDefFoundError Java?
-
09-06-2019 - |
質問
ろ NoClassDefFoundError
私が行っJavaアプリケーション何が通常の原因は?
解決
原因となる可能性がありがある場合はクラスファイルがコードに依存す現在のコンパイルが見つかりませんで行います。他者との差異を探求しようとビルドタclasspaths.
他のヒント
ができることにより、クラスパスのミスマッチをコンパイル時や実行時間たちの見解を示すものではない、trueです。
を保つことが重要では異なる例外直頭の中にこの場合:
java.lang.ClassNotFoundException
このことを示す例外クラスは見つかりませんでしたのclasspath.このことはしようとしていた負荷は、クラス定義のクラスは存在しなかったのclasspath.java.lang.NoClassDefFoundError
このことを示す例外JVMの面倒を見ることができて、その内部クラス定義のデータ構造の定義のクラスを見つけられませんでしたのです。とは異なるということができていなかったから読み込みクラスパス.通常、このことはまれたクラスをロードからのクラスパスで失敗した理由-ししようとしているこのクラスもなかったとしても、ほと負荷のかからず、しんでもってみてはい負荷で、しまったので載荷ので早めに合理的に疑うことに失敗す。先に失敗するClassNotFoundExceptionまたはExceptionInInitializerError(指示に支障が生じた場合に静的初期化ブロック)又は番号以外の多くの問題を抱えている。そのポイントは、NoClassDefFoundErrorを明らかにすることは必ずしもクラスパスの問題です。
こちらのコード例 java.lang.NoClassDefFoundError
.をご覧ください Jaredの回答 詳しい説明をします。
NoClassDefFoundErrorDemo.java
public class NoClassDefFoundErrorDemo {
public static void main(String[] args) {
try {
// The following line would throw ExceptionInInitializerError
SimpleCalculator calculator1 = new SimpleCalculator();
} catch (Throwable t) {
System.out.println(t);
}
// The following line would cause NoClassDefFoundError
SimpleCalculator calculator2 = new SimpleCalculator();
}
}
SimpleCalculator.java
public class SimpleCalculator {
static int undefined = 1 / 0;
}
思ったものを取得しまNoClassDefFound場合にはエラーコードをコンパイルされて互換性のない版のクラスが行います。特定のインスタンスを思い起こではapache axis図書館があります。のある2バージョン私の実行時クラスパスで持ち直しの時は、互換性のない版の訂正につ、NoClassDefFoundエラーになります。このコマンドラインアプリを使ったコマンドと同様です。
set classpath=%classpath%;axis.jar
ことができたものの適切なバージョンを用い:
set classpath=axis.jar;%classpath%;
NoClassDefFoundError Java
定義:
Java仮想マシンを調べることができなか、特定のクラスの実行時にご用意したコンパイルす。
場合のクラスが存在時のコンパイル時間がないjavaクラスパスの中で行います。
例:
- このクラスではないクラスパスがない撮影方法となることが多きい印刷システム。getproperty("java.クラスパス")で印刷のクラスパスからあります以上、もしくアイデアの実際の実行時クラスパス.
簡単な例NoClassDefFoundErrorはクラスに属するかのJARファイルJARませんでした追加されたクラスパスにあjar名を変更することができましたように私の場合、っていうキャラクターを変更しtibco.jar 入tibco_v3.jar のプログラムが失敗java.lang.NoClassDefFoundErrorったかの間違っています。
で試してみてくださいとの明示的に-クラスパスオプションのクラスパスがあると考えますとればよいのでしく短くなると誰かが重javaクラスパス.
- 許可発行にJARファイルが引き起こすこともありますNoClassDefFoundError Java.
- 商品につけられたタにXMLの設定が引き起こすこともありますNoClassDefFoundError Java.
- ためのクラスで定義されたパッケージさんの現在と同じパッケージ読み込み中の場合のようなJAppletをスローしますNoClassDefFoundError Java.
可能なソリューション
- のクラスはJavaクラスパス.
- って作業する場合にJ2EE環境の視認性のクラスの中で複数のクラスローダがjava.lang.NoClassDefFoundError、例のシナリオ部門の詳細な議論を行う。
- チェックのためのjava.lang.ExceptionInInitializerErrorログファイルです。NoClassDefFoundErrorの失敗による静的初期化しました。
- いNoClassDefFoundErrorはクラスのサブクラスjava.lang.LinkageErrorでも来ればそのうちの一つです。依存関係のようなネイティブライブラリがございません。
- 他の起動スクリプトをオーバー Classpath環境変数となります。
- きの実行プログラムをjarコマンドのクラスが定義されていないもののマニフェストファイルのクラスパスの属性。
資源
この ベスト液 私は見つかりです。
あるとしましょうというパッケージ org.mypackage
を含むクラス
- HelloWorld(メインクラス)
- SupportClass
- UtilClass
のファイルの定義このパッケージに格納し体の下のディレクトリ D:\myprogram
(Windows)または /home/user/myprogram
(Linuxで共通)。
ま呼び出しは、Java、弊社指定のアプリケーションの名前を実行します: org.mypackage.HelloWorld
.しかしまたかのJavaみのファイルやディレクトリを定義する弊社のパッケージです。そのプログラムを用いて以下のコマンド:
使っていた Spring Framework と Maven とは、この誤った。
また、ランタイムエラーが発生します。また読み物としての整数での値の読み取りからのプロパティファイルの場合、その値にした。
春はなく、フルスタックトレースのあるラインの実行に失敗しました。で簡単に言うと NoClassDefFoundError
.しかし調査を行い、多くの新知見をもたネイティブのJavaアプリケーションを出ることができなければ、このMVC)しました ExceptionInInitializerError
した真の原因となるかを追跡にエラーとなります。
@xliの答えたいどれが誤っている可能性が考えられ自分のコードです。
を取得しまNoClassFoundErrorがクロードは、runtimeクラスローダがアクセスできない授業が保存されているjava rootloader.では、異なるクラスローダによって安全保障分野において(java)のjvm許さないのではないでしょう授業が保存されているのrootloaderを解決し、実行時のローダーアドレス空間です。
実行プログラムで、javaのバージョンがjava-javaagent:tracer.jar [java(<%=ARGS%>等:ARGS]'
で出力を示し、ロードされたクラスローダの順番でenvをロードします。でもトレースはなぜクラスは解消されることがあります。
// ClassLoaderTracer.java
// From: https://blogs.oracle.com/sundararajan/entry/tracing_class_loading_1_5
import java.lang.instrument.*;
import java.security.*;
// manifest.mf
// Premain-Class: ClassLoadTracer
// jar -cvfm tracer.jar manifest.mf ClassLoaderTracer.class
// java -javaagent:tracer.jar [...]
public class ClassLoadTracer
{
public static void premain(String agentArgs, Instrumentation inst)
{
final java.io.PrintStream out = System.out;
inst.addTransformer(new ClassFileTransformer() {
public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
String pd = (null == protectionDomain) ? "null" : protectionDomain.getCodeSource().toString();
out.println(className + " loaded by " + loader + " at " + new java.util.Date() + " in " + pd);
// dump stack trace of the thread loading class
Thread.dumpStack();
// we just want the original .class bytes to be loaded!
// we are not instrumenting it...
return null;
}
});
}
}
この場合は特に、どの参照 NoClassDefFoundErrors
ユニット試験...
一つの興味深い場合がたくさん見る NoClassDefFoundErrors
できます:
throw
aRuntimeException
のstatic
ブロックのクラスExample
- 遮断したい場合、それだけでは関係ありませんようにスローされる テストケース)
- ものを作ろうという試みは、このクラスのインスタンス
Example
static class Example {
static {
thisThrowsRuntimeException();
}
}
static class OuterClazz {
OuterClazz() {
try {
new Example();
} catch (Throwable ignored) { //simulating catching RuntimeException from static block
// DO NOT DO THIS IN PRODUCTION CODE, THIS IS JUST AN EXAMPLE in StackOverflow
}
new Example(); //this throws NoClassDefFoundError
}
}
NoClassDefError
スローされに伴う ExceptionInInitializerError
静からブロック RuntimeException
.
これは特に重要となる場合がご NoClassDefFoundErrors
お ユニットテスト.
うだ"共有"の static
ブロック実行との間の試験は、初期 ExceptionInInitializerError
するだけでなく試験する。最初の問題 Example
クラスです。その他のテストケースを利用する Example
クラスだけで投げ NoClassDefFoundErrors
.
する場合には発生するコード(EMF等) ができるものが多く静initialisers消すべてのスタック空間です。
見スタックオーバーフロー問題 するにはどうしたらいいのか、Javaスタックの大きさはどれくらいですか?.
技術を以下にいく時:
System.out.println(TheNoDefFoundClass.class.getProtectionDomain().getCodeSource().getLocation());
のTheNoDefFoundClassのクラスが"失われた"より設定のための古いバージョンのライブラリを使用されます。この最も頻繁に起こる場合は、クライアントソフトウェアの展開に支配的なコンテナの武装を持たclassloaderとトンの古いバージョンの一番人気のlib.
い私の問題を無効にして、preDexLibrariesすべてのモジュール:
dexOptions {
preDexLibraries false
...
NoClassDefFoundError
でもかった場合に発生 静的 初期化子をロードしようとするリソースバンドルはご利用いただけませんことにランタイム時において、例えばプロパティファイルの影響のクラスをロードしようとするから META-INF
ディレクトリになります。ない場合は漁 NoClassDefFoundError
, がんを見ることができ、フルスタックトレース;克服できるようになり、一時的に使用 catch
条項 Throwable
:
try {
// Statement(s) that cause the affected class to be loaded
} catch (Throwable t) {
Logger.getLogger("<logger-name>").info("Loading my class went wrong", t);
}
あまで java.lang.NoClassDefFoundError: org/apache/log4j/Logger
エラーの場合で製作されたので使用したlog4j2(なかなか追加しているため、すべてのファイルのいらっしゃるので、依存関係図書館の利用log4j1.この溶液を加え、Log4j1.xブリッジ:jar log4j-1.2-api-<version>.jar
付属log4j2.詳細情報をlog4j2 移動.
二つの異なるアウトのコピーを同じプロジェクト
私の場合、この問題はEclipseのな差別化する二つの異なるページのみのサービスになります。ませていただきました。ロックのエラー(SVNバージョン管理)に勤務のある子どもがいるということです。またひとつの作業コピーとしての程度php,c#,dに試験場合は、抽出、民間の内部クラスを公開クラス自身で、オープンしたその他のコピーをプロジェクトを見せたり、他の部分のコードと変わります。時点にお NoClassDefFoundError
ポップアップされ訴えることは、民間の内部クラスませんでしたがダブルクリックするスタックトレースとなったのソースファイルが間違ったプロジェクトをコピーしたい
閉会の幹のコピープロジェクトのテストケースもよく見ろの問題です。
このエラーが発生する可能性がありますにチェック Javaバージョン ます。
私の場合は解消できるこのエラーを築きながら、高いオープンソースプロジェクトでは、Java9Java8を利用 SDKMAN!.
sdk list java
sdk install java 8u152-zulu
sdk use java 8u152-zulu
してクリーンインストールします。
利用の場合 Maven としてビルドツールなので、時にも、通常は喜ば、い クリーン 'install'を使用してインストールするの構築 試験を無効に.
mvn clean install -DskipTests
その すべ において設置され、見ていて気分が良いもの走行テストを実施していた。
mvn test
私NoClassDefFoundたときにエラーが発生しなかった輸出クラスに"注文のエクスポート"タブのJavaのビルド-パスのプロジェクト.いけチェックマークを"注文のエクスポート"タブの依存関係を追加するプロジェクトの構築ます。見 Eclipse警告:XXXXXXXXXXX.jar まず輸出または載っています。ランタイムClassNotFoundExceptions場合.
Javaできなかったのクラスで行います。クラスでしたmavenプロジェクトArtClientから異なるスペースが活用できます。私は輸入ArtClient私のEclipseプロジェクト.私のプロジェクトを使用ArtClientとして依存性がある。い図書館レファレンス-プロジェクト参照のためにこれらのもの(Build Path->Configureの構築ます。
その問題点をい。
また、同じ問題でした株式のための多くの時間です。
このソリューションとなります。私の場合、または、staticメソッドの定義によります。のJVM作成できませんの別のオブジェクトのクラスです。
例えば、
private static HttpHost proxy = new HttpHost(proxyHost, Integer.valueOf(proxyPort), "http");
私はこのメッセージを取り除いた後に二つのファイルから、SRCは、図書室、やって持って帰られるかと思い自分が入りたかったのがこのエラーメッセージを表示します。
私の解した:Eclipseを再起動します。以来、こんなメッセージを再度:-)
必ずこの試合の module:app
や module:lib
:
android {
compileSdkVersion 23
buildToolsVersion '22.0.1'
packagingOptions {
}
defaultConfig {
minSdkVersion 17
targetSdkVersion 23
versionCode 11
versionName "2.1"
}