über den Java classpath-Einstellung auf Linux
jeder.
Ich verwendet openjdk-7 auf arch linux. Ich begann zu lernen, Java vor kurzem, und begegnet so ein problem:
Ich habe eine Datei unter /home/hqwrong/Code/java/mew/Mouth.java:
package mew;
public class Mouth{
public static void main(String argv[]){
pickle.Say s = new pickle.Say();
}
}
und einer weiteren an /home/hqwrong/Code/java/pickle/Say.java :
package pickle;
public class Say{
public Say(){
System.out.println("Say");
}
}
Ich zusammengestellt Say.java zu Say.class mit:
$ cd /home/hqwrong/Code/java/pickle
$ javac Say.java
ist erfolgreich.
Ich zusammengestellt Mouth.java mit:
$ cd ../mew
$ export CLASSPATH=.:/home/hqwrong/Code/java/
$ javac Say.java
keine Fehlermeldung.
Aber nach dem ich Typ:
$ java Sagen
Bekam ich:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.mew
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:649)
at java.lang.ClassLoader.defineClass(ClassLoader.java:785)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472)
Es ist dasselbe, wenn ich Sie benutze:
$ java -cp $CLASSPATH Say
Ich brauche deine Hilfe,bitte?
- Führst du den code, wie, oder Sie modifiziert es für diese Frage? Ich vermute, dass in Ihrem code, den Sie haben könnte " - Paket von java.mew'?
- der Anfangswert ist nichts, ich weiß nicht, warum es kompiliert und funktioniert erfolgreich bis ich dieses Paket testen, Vielleicht kennt er den jdk-system der lib-Pfad durch einige andere Weg.
- ja,es ist das original.Ich bin java zu lernen, das ist mein code zu lernen, der java-package-Funktionalität. Sie schlägt auch dann fehl, nach dem modifizierten Paket java.mew.
- Sorry, das ist gut. Sie nicht haben sollte " - Paket von java.etwas" in Ihrem code. "Paket mew" oder "Paket Gurke" ist OK. Ich war nur die überprüfung, ob es war ein Fehler in der Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da es keine gute Antwort, aber ich poste meine.
Zunächst sollten Sie wirklich haben Sie einen separaten Ordner für Ihre Klassen und Ihre Quellen. Ich schlage vor, mit
java/src
für Ihre Quellen, undjava/classes
für Ihre Klassen. Da die Klassen sind gespeichert im Ordner "classes", das ist die, die sollte im classpath.Die Ordner-Struktur Ihrer Quellen sollten dann entsprechend Ihrer package-Struktur. Dies bedeutet, dass die Klasse mew.Mund muss die Zeile enthalten
package mew
definiert werden, die in der Mouth.java Datei, in derjava/src/mew
Ordner.Kompilieren Ihrer Klassen, die Sie setzen in die
java/src
Verzeichnis, und verwenden Sie folgenden Befehl:Der compiler generiert automatisch die Ordnerstruktur passend zu den package-Struktur in das classes-Verzeichnis. Wenn Sie machen strukturelle änderungen in deinem source tree, entfernen Sie einfach alles in den classes-Ordner und kompilieren Sie alles.
Führen Sie Ihre Klassen, die Sie beziehen müssen, um Ihren voll qualifizierten Namen. Und den Ordner mit den package-Baum (
java/classes
Ordner) muss in den classpath. Sobald dies geschehen ist, von überall, die Sie verwenden können,Beachten Sie, dass, wie Sie entdeckt haben, die
java
undjavax
Pakete sind vorbehalten. Sie können nicht verwenden Sie für Ihre eigenen Klassen.Bitte versuchen Sie dieses,
öffnen Sie Ihr root-Ordner, Gehen Sie zu Ansicht-Menü & tick , versteckte Dateien anzeigen. Jetzt zeigt Es eine Datei namens ".bashrc". öffnen Sie diese Datei & schreiben Sie folgenden Zeilen von code,