[英]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.