设置我的Java环境。 JAR / CLASSPATH

时间:2013-07-12 14:12:30

标签: java jar classpath

所以我开始使用Java。我目前在Ubuntu平台上。我安装了jdk,它在初始阶段工作正常。然后我转向“访问控制”一章,开始谈论CLASSPATH和罐子。

这就是我所做的。

在我的桌面上,我创建了一个文件夹A,然后我创建了文件Aa.java

package home.kraken.Desktop.A;

class Aa{
    public doSome(){
        System.out.println("AA");
    }
}

在桌面上我在

中有另一个文件夹B和文件Bb.java
package home.kraken.Desktop.B;

import  home.kraken.Desktop.A.*;
class Bb{
    public static void main(String[] args){

        Aa a = new Aa();
        a.doSome();
    }
}

现在,当我运行Bb.java时,我收到错误,它无法找到Aa。

好的,我知道CLASSPATH是某种变量,它提供了搜索其他类的位置。现在这是我的问题

  1. 我怎么知道我的CLASSPATH是什么?
  2. 在第一个声明中,我已经写了它所在文件夹的完整地址。即使这样,它也找不到它?我的项目是否只能由CLASSPATH指出?
  3. 说我的CLASSPATH指向桌面[即我为我创建的每个文件设置了CLASSPATH的值,如果我要导入其他类,那么我会import RELATIVE_ADDRESS_TO_DESKTOP
  4. 如何设置CLASSPATH的值?
  5. 什么是jar。我知道它是Class FIles的集合,但我是否使用某个命令显式创建一个jar文件或者......它是如何工作的?
  6. 感谢。

    修改

    所以这就是我做的事情

    我的classpath原来是空的,所以我做了

    export CLASSPATH="$CLASSPATH:/home/kraken/Desktop"

    现在在Inside文件夹Desktop / A中,我有

    package A;
    
    public class Aa{
        public void doSome(){
            System.out.println("AA");
        }
    }
    

    在文件夹Desktop / B中,我有

    package B;
    
    import  A.*;
    class Bb{
        public static void main(String[] args){
    
            Aa a = new Aa();
            a.doSome();
        }
    }
    

    现在,我做javac Aa.java

    javac Bb.java

    当我做java Bb [内部文件夹桌面/ B运行程序时,它说]

      

    线程“main”中的异常java.lang.NoClassDefFoundError:Bb(错误的名称:B / Bb)       at java.lang.ClassLoader.defineClass1(Native Method)       at java.lang.ClassLoader.defineClass(ClassLoader.java:634)       at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)       at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)       at java.net.URLClassLoader.access $ 000(URLClassLoader.java:73)       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:212)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:205)       at java.lang.ClassLoader.loadClass(ClassLoader.java:321)       在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:294)       at java.lang.ClassLoader.loadClass(ClassLoader.java:266)   找不到主要类:Bb。程序将退出。

    这里发生了什么?

    编辑2

    当我java B.Bb [内部文件夹B.Bb]时打印出AA

    如果有人能解释发生了什么事?

2 个答案:

答案 0 :(得分:2)

  

1)我怎么知道我的CLASSPATH是什么?

这是一个系统环境变量。在UNIX / Linux上,键入“echo $ CLASSPATH”以查看它的设置。

  

2)在第一个声明中,我写了完整的地址   它所在的文件夹。即使那样它也找不到它?我的项目必须是   仅由CLASSPATH指出?

这是一个包名。它告诉Java在类路径中查看的位置。通常,包名称与文件的绝对路径不匹配。例如,假设我的文件系统/ user / local / com / stackoverflow / foo上有一个类。 Java需要将类路径设置为/ usr / local,因此它知道在哪里查找类。类似地,该文件可能在jar中,而classpath表示要查看jar。

  

3)说我的CLASSPATH指向桌面[即我为每一个设置了CLASSPATH的值   我创建的文件,如果我要导入其他类,那么我将导入   RELATIVE_ADDRESS_TO_DESKTOP?

是。您的CLASSPATH指向包语句的“根”。

  

4)如何设置CLASSPATH的值?

export CLASSPATH =“$ CLASSPATH:textToAddToClasspath”

  

5)什么是jar。我知道它是Class FIles的集合,但我是明确的   使用某个命令制作一个jar文件或......它是如何工作的?

是的,jar是类文件的集合。您可以使用“jar -cvf jarname.jar * .class”或类似的

创建它

答案 1 :(得分:0)

将Aa.java和Bb.java放在同一个文件夹中。 我相信JDK包是默认设置的。 因此,如果您将这两个文件放在同一个文件夹中,那么您只需将类路径设置为您拥有所有内容的文件夹。

java -classpath /home/user/myprogram org.mypackage.AA.java

或者你的文件结构是什么^^

这应该让你的程序正常工作