6

「MyTools」という瓶があります。jarファイルはc:\dataフォルダーにあります。同じフォルダに「UseTools.java」という名前の新しいファイルを作成しました。ここで、UseTools.javaのMyTools.jarのクラスのいくつかを使用したいと思います。私はこれを試しましたが、うまくいかないようです:

import MyTools.*;    
public class UseTools
{
  public static void main(String[] args) 
  {
    MyTools.SomeClass foo = new SomeClass();
    SomeClass.doSomething();
  }
}

私はこれを次のようにコンパイルしようとしました:

javac -cp . UseTools.java

そしてこのエラーメッセージを受け取りました:

UseTools.java:1: package MyTools does not exist
import MyTools.*;
^
UseTools.java:7: package MyTools does not exist
        MyTools.SomeClass foo = new SomeClass()
                                     ^
2 errors

どのクラスにもパッケージ名を設定していません。

jarクラスにパッケージ名を設定する必要がありますか?

4

3 に答える 3

5

質問のタイトルに関連する何かに言及するには: Java では、名前付きパッケージ内のコードからデフォルト パッケージ内のクラスにアクセスすることはできません。

これは、jar ファイル内のクラスがどのパッケージにも明示的に属しておらず、jar ファイル内でファイルがサブフォルダーなしで直接ルート フォルダーにある場合、それらはデフォルト パッケージにあることを意味します。これはあまり精巧ではなく、モジュール性と拡張性に欠けていますが、技術的には問題ありません。次に、デフォルト パッケージにもあるコードからのみこれらのクラスを使用できます。しかし、これは必ずしも同じ瓶に入れなければならないという意味ではありません。複数の src フォルダーまたはクラス フォルダーがある場合、すべてのフォルダーに対話可能な既定のパッケージ内のクラスが含まれている可能性があります。JAR ファイルの編成とプロジェクトのパッケージ構造は、互いに独立しています。

ただし、明示的なパッケージ情報を使用することを強くお勧めします。

于 2014-10-08T05:28:26.477 に答える
1

MyTools.jar には、MyTools という名前のパッケージがあるはずです。コンパイルする前に、jar をクラスパスに追加する必要があります。

于 2010-02-23T17:42:00.233 に答える
0

-cpの代わりに-cpfile.jarを追加する必要があります。

後者は.classファイルのみを取得します。ところで:netbeans、eclipse、intelliJなどのIDEを使用してみませんか?

于 2010-02-23T17:04:57.343 に答える