繁体   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