【问题标题】:Setting up my Java Environment. Jar/CLASSPATH设置我的 Java 环境。罐子/类路径
【发布时间】:2013-07-12 14:12:30
【问题描述】:

所以我开始使用 Java。我目前在 Ubuntu 平台上。我安装了 jdk,它在初始阶段运行良好。然后我转到“访问控制”一章,它开始谈论 CLASSPATH 和 jars。

这就是我所做的。

在我的桌面上,我创建了一个文件夹 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 到底是什么。我知道这是类文件的集合,但我是否使用某些命令明确地制作了一个 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文件夹内运行程序时,它说]

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

这里发生了什么?

编辑 2

当我执行java B.Bb [Inside Folder B.Bb] 时,它会打印出AA

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

【问题讨论】:

  • 老实说,对于每个问题,网上都有很多帮助
  • @Kraken : 请找到这个包含.txt 文件的.zip 文件,看看这是否能让你以任何方式理解整个事情。

标签: java jar classpath


【解决方案1】:

1) 我如何知道我的 CLASSPATH 是什么?

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

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

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

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

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

4) 如何设置 CLASSPATH 的值?

导出 CLASSPATH="$CLASSPATH:textToAddToClasspath"

5) jar 到底是什么。我知道它是类文件的集合,但我明确表示 使用一些命令或......它是如何工作的?

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

【讨论】:

  • 为什么要制作jar文件?类文件对我来说不是很好吗?还是它适用于我的系统,但如果我必须将它提供给其他人,而不是大量的类文件,我会给他一个他可以插入的 jar 文件?
  • 没错。 jar 文件有助于分发。你不必做一个。你问了,所以我回答了;)。
  • 您好,我尝试运行已设置 CLASSPATH 的程序。请检查编辑。谢谢
【解决方案2】:

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

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

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

这应该让你的程序工作

【讨论】:

  • 你不知道你在说什么。这是完全错误的。
猜你喜欢
  • 2016-07-13
  • 2012-03-25
  • 2010-12-13
  • 2019-06-07
  • 1970-01-01
  • 2022-11-27
  • 2019-03-18
  • 1970-01-01
相关资源
最近更新 更多