0

Jar ファイル ( ) にいくつかの依存クラスがあるクラスのコンパイルに関して質問がありますMyJar.jar。ディレクトリ ツリーを -classpath オプション (例: javac -cp MyJar MyClass.java) に配置すると、すべてのサブディレクトリのクラスがチェックされますか?それともディレクトリ ツリーの最上位クラスのみがチェックされますか? 前もって感謝します。

4

2 に答える 2

1

で指定されたディレクトリは-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。パッケージは、クラスのパッケージ宣言で定義されているもののみです。

于 2013-02-28T10:09:40.820 に答える
0

ディレクトリ ツリーがパッケージを表す場合、すべてのクラスがロードされて使用可能になります。

たとえば、次のクラス:

package my.company.project;

public class MyClass {
    public static void main(String[] args) {}
}

使用できるようにするには、フォルダーmy/company/project内にある必要があります。

于 2013-02-28T09:25:20.913 に答える