[英]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是某种东西,它是一个变量,可提供搜索其他类的位置。 现在这是我的问题
import RELATIVE_ADDRESS_TO_DESKTOP
吗? 谢谢。
编辑
所以这就是我所做的
我的课程路径本来是空的,所以我做了
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.