繁体   English   中英

设置我的Java环境。 JAR / CLASSPATH

[英]Setting up my Java Environment. Jar/CLASSPATH

因此,我开始使用Java。 我目前在Ubuntu平台上。 我安装了jdk,并且在初始阶段运行良好。 然后,我转到“访问控制”一章,在那里开始谈论CLASSPATH和jar。

这就是我所做的。

在我的桌面上,我创建一个文件夹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. 到底是什么罐子。 我了解这是Class FIles的集合,但是我是否使用某些命令或...明确地创建了jar文件?它是如何工作的?

谢谢。

编辑

所以这就是我所做的

我的课程路径本来是空的,所以我做了

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

现在在文件夹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 [在文件夹Desktop / B内部运行该程序时,它说]

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

这是怎么回事

编辑2

当我做java B.Bb [Inside Folder B.Bb]它打印出AA

如果有人可以解释发生了什么?

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

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

2)在第一个语句中,我已经写出了它所在文件夹的完整地址。 我的项目仅必须由CLASSPATH指向吗?

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

3)说我的CLASSPATH指向Desktop [即,我设置CLASSPATH的值],现在对于我创建的每个文件,如果我要导入其他类,那么我将导入RELATIVE_ADDRESS_TO_DESKTOP?

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

4)如何设置CLASSPATH的值?

export CLASSPATH =“ $ CLASSPATH:textToAddToClasspath”

5)什么是罐子。 我了解这是Class FIles的集合,但是我是否使用某些命令或...明确地创建了jar文件?它是如何工作的?

是的,罐子是类文件的集合。 使用“ jar -cvf jarname.jar * .class”等创建它

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

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

或任何文件结构是^^

这应该使您的程序正常工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM