java -cp CLASSPATH
と を使用して Java アプリケーションを実行することの違いは何java -jar JAR_FILE_PATH
ですか? Java アプリケーションを実行するには、どちらが優先されますか? これらの方法のどれがJVMにとってより高価であるかということです(マシンリソースの使用状況による)?
アプリケーションを実行しようとしているときに、JVM がより多くのスレッドを生成する原因となるのはどれですか?
落とし穴が少ないという理由だけで、Javaアプリケーションを開始する最初のバージョンを好みます(「クラスパス地獄へようこそ」)。2 つ目は、実行可能な jar ファイルを必要とし、そのアプリケーションのクラスパスを jar のマニフェスト内で定義する必要があります (他のすべてのクラスパス宣言は黙って無視されます...)。したがって、2 番目のバージョンでは、jar を調べ、マニフェストを読み、jar が格納されている場所からクラスパス エントリが有効かどうかを確認する必要があります...これは回避できます。
どちらのバージョンについても、パフォーマンスの利点や欠点は期待できません。メインスレッドに使用するクラスと、ライブラリを見つけることができる場所を jvm に伝えるだけです。
-cp
引数を使用して、クラスパス、つまり、プログラムがコンパイルまたは実行するときに必要になる可能性のある追加のクラスまたはライブラリへのパスを提供します。実行する実行可能 JAR ファイルを-jar
指定します。
両方を指定することはできません。実行しようとするjava -cp folder/myexternallibrary.jar -jar myprogram.jar
と、実際には機能しません。その JAR のクラスパスは、-cp
引数としてではなく、そのマニフェストで指定する必要があります。
PS:-cp
と-classpath
は同義語です。
使用java -cp
する場合は、完全修飾メイン クラス名を指定する必要があります。
java -cp com.mycompany.MyMain
jar ファイルを使用java -jar myjar.jar
する場合、フォルダ内の jar ファイルに含まれる manifest.mf を介してメイン クラスに関する情報を提供する必要がありますMETA-INF
。
Main-Class: com.mycompany.MyMain
クラスパスにすべてのコードを指定する場合は、java -cp CLASSPATH が必要です。これは、コードのデバッグに役立ちます。
jarred 実行可能形式:java -jar JarFile
単一の短いコマンドでアプリを起動する場合に使用できます。Class-Path エントリでスペース区切りの jar を使用して、MANIFEST で追加の依存 jar ファイルを指定できます。次に例を示します。
Class-Path: mysql.jar infobus.jar acme/beans.jar
どちらもパフォーマンスの点で同等です。
性能面での違いはありません。java - cp を使用すると、Java クラス ファイルを実行するためにクラスパスに必要なクラスと jar を指定できます。
実行可能なjarファイルの場合。java -jar コマンドを使用すると、jvm は、jar ファイル内の /META-INF/MANIFEST.MF ファイルから実行する必要があるクラスを見つけます。