Jar ファイル ( ) にいくつかの依存クラスがあるクラスのコンパイルに関して質問がありますMyJar.jar
。ディレクトリ ツリーを -classpath オプション (例: javac -cp MyJar MyClass.java
) に配置すると、すべてのサブディレクトリのクラスがチェックされますか?それともディレクトリ ツリーの最上位クラスのみがチェックされますか? 前もって感謝します。
2 に答える
で指定されたディレクトリは-cp
再帰的に検索されますか:いいえ
クラスローダーがクラスパスで指定されたディレクトリに入ると、package
クラスがサブディレクトリとして配置されている場所の使用を開始します。パッケージが指定されていない場合、クラスローダーはディレクトリの直接の子(クラスファイル)の下にパッケージを期待します。
-cp
それはdirecoties/jarsとの組み合わせですpackage name
。
次のディレクトリ構造があるとしましょう
+ Project
sayhello.jar
+ dir
+ sub
+ com
+ test
SayHelloMain.java
クラスのコードはどこにありますかSayHelloMain.java
(パッケージ宣言に注意してください)
package com.test;
import miscellaneous.so.SayHello;
public class SayHelloMain {
public static void main(String[] args) {
SayHello.sayIt();
}
}
sayhello.jar
およびクラスを含むjarファイルSayHello
SayHelloMain
これは、コマンドラインがJavaソースファイルと同じディレクトリで開かれている場合にクラスをコンパイルする方法です。
javac SayHelloMain.java -cp ..\..\..\..\sayhello.jar
または、コマンドラインがディレクトリで開かれている場合Project
javac dir\sub\com\test\SayHelloMain.java -cp sayhello.jar
uがdierctoryにコマンドラインを開いたとしましょうProject
これがクラスの実行方法ですSayHelloMain
java -classpath dir\sub;sayhello.jar com.test.SayHelloMain
したがって、クラス名は完全に修飾されている必要がありますcom.test.SayHelloMain
コマンド
java -classpath dir;sayhello.jar com.test.SayHelloMain
direcotrydir
は再帰的に検索されないため、機能しません
コマンド
java -classpath dir;sayhello.jar sub.com.test.SayHelloMain
そのようなパッケージがないため、動作しませんsub.com.test
。パッケージは、クラスのパッケージ宣言で定義されているもののみです。
ディレクトリ ツリーがパッケージを表す場合、すべてのクラスがロードされて使用可能になります。
たとえば、次のクラス:
package my.company.project;
public class MyClass {
public static void main(String[] args) {}
}
使用できるようにするには、フォルダーmy/company/project内にある必要があります。