簡體   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