[英]about Java's classpath setting on Linux
大家。
我在arch linux上使用過openjdk-7。 我最近開始學習Java,遇到了這樣的問題:
我在/home/hqwrong/Code/java/mew/Mouth.java中創建了一個文件:
package mew;
public class Mouth{
public static void main(String argv[]){
pickle.Say s = new pickle.Say();
}
}
另一個位於/home/hqwrong/Code/java/pickle/Say.java:
package pickle;
public class Say{
public Say(){
System.out.println("Say");
}
}
我使用以下方法將Say.java編譯為Say.class:
$ cd /home/hqwrong/Code/java/pickle
$ javac Say.java
這是成功的。
我使用以下命令編譯了Mouth.java:
$ cd ../mew
$ export CLASSPATH=.:/home/hqwrong/Code/java/
$ javac Say.java
沒有錯誤消息。
但是在我輸入之后:
$ java說
我有:
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)
使用時是相同的:
$ java -cp $CLASSPATH Say
我需要你的幫助嗎?
既然沒有好的答案,我將發布我的信息。
首先,您確實應該為您的課程和您的資源有一個單獨的文件夾。 我建議使用java/src
為你的源代碼,並java/classes
為你的類。 由於這些類存儲在classes文件夾中,因此這是應該放在類路徑中的類。
源文件的文件夾樹應與程序包樹匹配。 這意味着類mew.Mouth必須包含行package mew
,該行package mew
是在Mouth.java文件的java/src/mew
文件夾中定義的。
要編譯您的類,請將您放入java/src
目錄,並使用以下命令:
javac -d ../classes mew/Mouth.java pickle/Say.java
編譯器將自動生成與classes目錄中的包結構匹配的文件夾結構。 如果您在源代碼樹中進行結構修改,只需刪除classes文件夾中的所有內容,然后重新編譯所有內容。
要運行您的類,您必須引用其完全限定名稱。 並且包含軟件包樹的文件夾( java/classes
文件夾)必須位於類路徑中。 完成此操作后,您可以在任何地方使用
java mew.Mouth
請注意,您已經發現,保留了java
和javax
包。 您不能將它們用於自己的課程。
請嘗試一下
打開您的根文件夾,轉到查看菜單並打勾,查看隱藏的文件。 現在它將顯示一個名為“ .bashrc”的文件。 打開此文件並寫下以下代碼行,
PATH=$PATH:/opt/jdk1.6.0_21/bin
export PATH
JAVA_HOME=/opt/jdk1.6.0_21
export JAVA_HOME
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.