簡體   English   中英

關於Linux上Java的classpath設置

[英]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

請注意,您已經發現,保留了javajavax包。 您不能將它們用於自己的課程。

請嘗試一下

打開您的根文件夾,轉到查看菜單並打勾,查看隱藏的文件。 現在它將顯示一個名為“ .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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM