HelloWorldプログラムをコンパイルしました。コマンドPromptを使用して実行しています。 .classファイルの名前はHelloWorld2.classです
ファイルはC:\ Users\Matt\workspace\HelloWorld2\binにあります。コマンドプロンプトに移動して「Java HelloWorld2」と入力すると、次のようになります。
C:\Users\Matt>Java HelloWorld2
Exception in thread "main" Java.lang.NoClassDefFoundError: HelloWorld2
Caused by: Java.lang.ClassNotFoundException: HelloWorld2
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: HelloWorld2. Program will exit.
HelloWorldが印刷されるのを期待していました。私は何を間違えていますか? JDKがインストールされています。
コンパイル済みクラスを見つけるために、クラスパスを設定する必要があります。
Java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2
コマンドラインから Javaクラスファイル を実行するための構文は次のとおりです。
Java -classpath /path/to/jars <packageName>.<MainClassName>
packageName(通常はcom
またはorg
で始まります)は、クラスファイルが存在するフォルダー名です。
たとえば、メインクラス名がAppで、アプリの Javaパッケージ名 がcom.foo.app
である場合、クラスファイルはcom/foo/app
フォルダー(各ドットの個別フォルダー)にある必要があります)、アプリを次のように実行します:
$ Java com.foo.app.App
注:$
はシェルプロンプトを示しています。入力時には無視してください
クラスにpackage
名が定義されていない場合は、単にJava App
として実行します。
他のjar依存関係がある場合は、-cp
/-classpath
を使用するか、使用して classpath パラメーターを指定したことを確認してください。 CLASSPATH
あなたのjar/war/ear/Zip/classファイル。そのため、Linuxではコマンドの前にCLASSPATH=/path/to/jars
を付けることができ、Windowsではフォルダーをシステム変数に追加する必要があります。設定されていない場合、ユーザークラスパスは現在のディレクトリ(.
)で構成されます。
Maven を使用してサンプルプロジェクトを作成した場合:
$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
そして、mvn compile
ディレクトリでmy-app/
によってプロジェクトをコンパイルすると、target/classes/com/foo/app/App.class
にあるクラスファイルが生成されます。
実行するには、-cp
を介してクラスパスを指定するか、直接アクセスして、以下の例を確認します。
$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ Java com.foo.app.App
Hello World!
$ Java -cp target/classes com.foo.app.App
Hello World!
$ Java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && Java com.foo.app.App
Hello World!
クラス名とパッケージ名を再確認するには、Javaクラスファイル逆アセンブラツールを使用できます。例:
$ javap target/classes/com/foo/app/App.class
Compiled from "App.Java"
public class com.foo.app.App {
public com.foo.app.App();
public static void main(Java.lang.String[]);
}
注:コンパイルされたファイルが難読化されている場合、javap
は機能しません。
これは多くのことを意味しますが、最も一般的なのは、ファイルに含まれるクラスがファイル自体と同じ名前を持っていないことです。クラスがHelloWorld2とも呼ばれるかどうかを確認してください。