Ich versuche, von der Befehlszeile aus ein Java-Paket zu kompilieren, das ein anderes von mir importiert. Ich folgte einem Tutorial online , aber es scheint, dass ich eine Fehlermeldung bekomme, wenn ich versuche, die letzte Java-Datei (CallPackage.Java) zu kompilieren.
Hier ist die Dateistruktur:
+ test_directory (contains CallPackage.Java)
-> importpackage
-> subpackage (contains HelloWorld.Java)
Hier ist CallPackage.Java:
/// CallPackage.Java
import importpackage.subpackage.*;
class CallPackage{
public static void main(String[] args){
HelloWorld h2=new HelloWorld();
h2.show();
}
}
und hier ist 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
.$javac CallPackage.Java
.Dies gibt mir einen Fehler beim letzten Befehl:
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
Wie kann ich beide Pakete zusammenstellen? Vielen Dank für jede Hilfe!
Sind Sie sicher, dass sich importpackage/subpackage in Ihrem Klassenpfad befindet?
-cp-Pfad oder -classpath-Pfad
Geben Sie an, wo Benutzerklassendateien und (optional) Anmerkungsprozessoren und Quelldateien gesucht werden sollen. Dieser Klassenpfad überschreibt den Benutzerklassenpfad in der Umgebungsvariablen CLASSPATH. Wenn weder CLASSPATH, -cp noch -classpath angegeben ist, besteht der Benutzerklassenpfad aus dem aktuellen Verzeichnis. Weitere Informationen finden Sie unter Festlegen des Klassenpfads.
Wenn die Option -sourcepath nicht angegeben ist, wird der Benutzerklassenpfad auch nach Quelldateien durchsucht.
Wenn die Option -processorpath nicht angegeben ist, wird der Klassenpfad auch nach Anmerkungsprozessoren durchsucht.
http://docs.Oracle.com/javase/7/docs/technotes/tools/windows/javac.html
Das Problem war, dass der Klassenpfad für jeden Befehl (Javac und Java) festgelegt werden muss:
Versuchte Schritte
kompilieren Sie HelloWorld.Java anstelle des Unterpakets aus dem top_level:
$javac -cp . importpackage/subpackage/HelloWorld.Java
kompilieren Sie CallPackage.Java auf dieselbe Weise:
$javac -cp . CallPackage.Java
führen Sie die Datei auch mit dem Klassenpfad aus:
$Java -cp . CallPackage
NOTE: Beim Ausführen von "$ Java CallPackage" wird ein Fehler ausgegeben "Fehler: Hauptklasse CallPackage konnte nicht gefunden oder geladen werden"
Zusammenfassend muss bei jedem Schritt der Klassenpfad angegeben werden. Es funktionierte, nachdem es als solches ausgeführt wurde.
Gleiche Situation für mich. Ich übernahm es, indem ich gleichzeitig den Unterricht zusammenstellte.
Zum Beispiel ist hier mein Projekt:
+ 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 {
...
}
Wie Sie sehen können: BeerSelect.Java versucht Klassen in com.example.model Paket.
Beim ersten Mal kompilierte ich BeerExert.Java zuerst mit dem Befehl:
--> javac -d classes src/com/example/model/BeerExpert.Java
Dann:
--> javac -d classes src/com/example/web/BeerSelect.Java
Und das Ergebnis war:
-->... error: package com.example.model does not exist
Ich wusste also, dass das Zusammenstellen mehrerer Klassen separat in diesem Fall nicht funktioniert.
Nachdem ich auf Google gelitten hatte, fand ich diesen sehr einfachen Weg, um das Problem zu lösen:
Kompilieren Sie einfach alles auf einmal:
--> javac -d classes src/com/example/model/BeerExpert.Java src/com/example/web/BeerSelect.Java
Zum Schluss habe ich Folgendes bekommen:
+ beerV1
-> classes
-> com
-> example
-> model
-> BeerExpert.class
-> web
-> BeerSelect.class
-> src
-> com
-> example
-> model
-> BeerExpert.Java
-> web
-> BeerSelect.Java
Hoffentlich hilft das.
(1) kompilieren Sie zuerst den Code
javac -d importpackage.subpackage.HelloWorld
(2) und kompilieren Sie dann das CallPackage.Java
javac CallPackage.Java