(コマンドラインから)Java自分の別のパッケージをインポートするパッケージをコンパイルしようとしています。 tutorial online に従っていましたが、最終的なJavaファイル(CallPackage.Java)をコンパイルしようとするとエラーが発生します。
ファイル構造は次のとおりです。
+ test_directory (contains CallPackage.Java)
-> importpackage
-> subpackage (contains HelloWorld.Java)
CallPackage.Javaは次のとおりです。
/// CallPackage.Java
import importpackage.subpackage.*;
class CallPackage{
public static void main(String[] args){
HelloWorld h2=new HelloWorld();
h2.show();
}
}
helloWorld.Javaは次のとおりです。
///HelloWorld.Java
package importpackage.subpackage;
public class HelloWorld {
public void show(){
System.out.println("This is the function of the class HelloWorld!!");
}
}
$javac HelloWorld.Java
を使用してHelloWorld.Javaをコンパイルします。$javac CallPackage.Java
を使用してCallPackage.Javaをコンパイルします。これにより、最後のコマンドでエラーが発生します。
CallPackage.Java:1: package importpackage.subpackage does not exist
import importpackage.subpackage.*;
^
CallPackage.Java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
CallPackage.Java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
3 errors
両方のパッケージをコンパイルするにはどうすればよいですか?助けてくれてありがとう!
Importpackage/subpackageがクラスパスに含まれていますか?
-cp pathまたは-classpath path
ユーザークラスファイル、および(オプションで)注釈プロセッサとソースファイルの場所を指定します。このクラスパスは、CLASSPATH環境変数のユーザークラスパスをオーバーライドします。 CLASSPATH、-cp、-classpathのいずれも指定されていない場合、ユーザークラスパスは現在のディレクトリで構成されます。詳細については、クラスパスの設定を参照してください。
-sourcepathオプションが指定されていない場合、ソースファイルのユーザークラスパスも検索されます。
-processorpathオプションが指定されていない場合、アノテーションプロセッサのクラスパスも検索されます。
http://docs.Oracle.com/javase/7/docs/technotes/tools/windows/javac.html
問題は、コマンド(javacおよびJava)ごとにクラスパスを設定する必要があることです。
試みられたステップ
サブパッケージに移動する代わりに、top_levelからHelloWorld.Javaをコンパイルします。
$javac -cp . importpackage/subpackage/HelloWorld.Java
同じ方法でCallPackage.Javaをコンパイルします。
$javac -cp . CallPackage.Java
クラスパスを使用してファイルを実行する:
$Java -cp . CallPackage
[〜#〜] note [〜#〜]:「$ Java CallPackage」を実行すると、「エラー:メインクラスCallPackageが見つからないか、ロードできません」というエラーが表示されます。
要約すると、各ステップ中に、クラスパスを指定する必要があります。このように実行した後、機能しました。
私と同じ状況。そして、クラスを同時にコンパイルすることでそれを引き継ぐようになりました。
たとえば、私のプロジェクトは次のとおりです。
+ beerV1
-> classes
-> src
-> com
-> example
-> model
-> BeerExpert.Java
-> web
-> BeerSelect.Java
BeerExpert.Java:
package com.example.model;
import ...
public class BeerExpert{
...
}
BeerSelect.Java:
package com.example.web;
import com.example.model.*;
import ...
public class BeerSelect {
...
}
ご覧のとおり:BeerSelect.Javaはクラスをインポートしようとしています com.example.model パッケージ。
初めてコマンドでBeerExert.Javaをコンパイルしました:--> javac -d classes src/com/example/model/BeerExpert.Java
その後:--> javac -d classes src/com/example/web/BeerSelect.Java
そして結果は:-->... error: package com.example.model does not exist
したがって、この場合、複数のクラスseparatelyをコンパイルしても機能しないことはわかっていました。
グーグルで苦しんだ後、私はこの問題を解決する非常に簡単な方法を見つけました:
一度にすべてコンパイルします。
--> javac -d classes src/com/example/model/BeerExpert.Java src/com/example/web/BeerSelect.Java
最後に、私が得たものは次のとおりです。
+ beerV1
-> classes
-> com
-> example
-> model
-> BeerExpert.class
-> web
-> BeerSelect.class
-> src
-> com
-> example
-> model
-> BeerExpert.Java
-> web
-> BeerSelect.Java
お役に立てば幸いです。
(1)最初にコードをコンパイルする
javac -d importpackage.subpackage.HelloWorld
(2)次にCallPackage.Javaをコンパイルします
javac CallPackage.Java