簡體   English   中英

使用cp開關編譯Java程序-意外行為

[英]Compiling java program with cp switch - unexpected behavior

使用javac的-cp開關時,我無法理解某些行為。 我在Windows 7計算機的目錄C:\\ A \\ B \\ C>中有兩個Java文件。 文件是Extend.java和TestExtend.java; 兩者都屬於軟件包“ package com.gonni.profile”。 我收到以下錯誤:

C:\A\B>javac -d . -cp C\Extend.java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options

C:\A\B>javac -d . -cp 39#$%$fe#%#$%FF#$%GWE C\Extend.java

C:\A\B>javac -d . -cp  C\TestExtend.java
javac: no source files
Usage: javac <options> <source files>
use -help for a list of possible options

C:\A\B>javac -d . -cp 3458$^$%$%BF#W%V#$ C\TestExtend.java
C\TestExtend.java:6: cannot find symbol
symbol  : class Extend
location: class com.gonni.profile.TestExtend
    Extend exObj = new Extend();
    ^
C\TestExtend.java:6: cannot find symbol
symbol  : class Extend
location: class com.gonni.profile.TestExtend
    Extend exObj = new Extend();
                       ^
2 errors

C:\A\B>javac -d . -cp . C\TestExtend.java

C:\A\B>

Extend.java是:

package com.gonni.profile;

class Extend {
    class Inner {

    }
}

TestExtend.java是:

package com.gonni.profile;

class TestExtend {
    public static void main(String[] args) {
        Extend exObj = new Extend();
    }
}

不好意思地說,但是我不明白您想做什么:編譯程序或使javac失敗?

  1. 路徑C\\TestExtend.java似乎錯誤。 您可能是指C:\\TestExtend.java嗎?
  2. 什么是39#$%$fe#%#$%FF#$%GWE 您了解-cp是什么意思嗎?
  3. 您的課程屬於com.gonni.profile包。 這意味着它們必須從源根開始位於目錄com/gonni/profile
  4. 您不必提供選項-d . 這是默認值。
  5. 據我了解,您有幾個(2?)類,沒有任何外部依賴項。 這意味着您根本不必使用-cp (即CLASSPATH)。

該怎么辦?

  1. 創建項目所在的目錄。 假設C:\\myproj
  2. 為了簡化起見,請根據您的軟件包創建目錄結構。 例如,如果您的軟件包是com.gonni.profile ,則應創建目錄C:\\myproj\\com\\gonni\\profile
  3. 將您的課程放在那里。
  4. 打開命令提示符,然后轉到C:\\proj
  5. 現在運行命令javac com/gonni/profile/*.java

祝好運。

在這種情況下,您的源文件應位於目錄C:\\ A \\ B \\ C \\ com \\ gonni \\ profile下-不直接位於C:\\ A \\ B \\ C中。 選項-cp指定查找其他編譯類的路徑-而不是源文件。

如果要指定源樹的位置,請使用-sourcepath

    javac -sourcepath C C/com/gonni/profile/TestExtend.java

Javac要求列出必須在命令行中編譯的所有文件。 您不能只列出一個,而是自動列出其他人。 結果,大型,現實世界的項目很難以這種方式構建。 另外,修復其他人已經指出的一些小錯誤。

因此,如果您想成為命令行大師,請學習Eclipse,NetBeans等用於基於IDE的開發,或者學習Maven,Ant,Make等。 僅在這些時間直接調用javac並不常見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM