2013-01-15 36 views
0

我無法理解使用-c選項與javac時的某些行爲。我在Windows 7機器的目錄C:\ A \ B \ C>中有兩個java文件。這些文件是Extend.java和TestExtend.java;都屬於包'包com.gonni.profile'。我收到以下錯誤:用cp開關編譯java程序 - 出乎意料的行爲

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(); 
    } 
} 
+0

您是否在TestExtend類中導入了Extend類? – Jayamohan

+1

1)-cp需要一個參數,你在很多示例中省略它。 2)你的Windows路徑不正確3)在例子2和3中你提供給-cp的垃圾字符是什麼? – Perception

+0

感謝您快速回答。我意識到我的問題並不完整,並且即將編輯... java文件位於C:\ A \ B \ C,我正在從C:\ A \ B提供javac命令。我無法理解的是,如果我在-cp和實際路徑之間輸入任何隨機字符串,則javac編譯不然。是的,爲什麼我們可以用after -cp輸入任何垃圾參數,爲什麼還要輸入-cp expect和argument;任何解釋你的陳述的鏈接? – vk7905

回答

1

我很抱歉地說,但我不明白你想做什麼:編譯你的程序或使javac失敗?

  1. 路徑C\TestExtend.java看起來不對。你的意思是C:\TestExtend.java
  2. 什麼是39#$%$fe#%#$%FF#$%GWE?你明白-cp是什麼意思?
  3. 您的課程屬於包com.gonni.profile。這意味着他們必須位於目錄com/gonni/profile從您的根源開始。您不必提供選項-d .。這是默認設置。
  4. 據我瞭解,你有幾個(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

好運。

+0

感謝您快速回答。我意識到我的問題並不完整,並且即將編輯... java文件位於C:\ A \ B \ C,我正在從C:\ A \ B提供javac命令。我無法理解的是,如果我在-cp和實際路徑之間輸入任何隨機字符串,則javac編譯不然。 – vk7905

+0

感謝您的幫助。我想用-cp實現的是編譯跨多個文件夾的java文件,或者是一個文件夾中的java文件;而我們嘗試從抽象位置使用javac。這意味着目錄結構是C:\ A \ B \ C,我們在某些任意位置編寫javac命令,比如C:\ Users \ vk,其中java文件位於文件夾C:\ A,C:\ A \ B和C: \ A \ B \ C。你能解釋一下如何實現這一點嗎? – vk7905

0

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

使用-sourcepath,而是如果要指定源代碼樹的位置:

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

感謝您的快速回答。我意識到我的問題並不完整,並且即將編輯... java文件位於C:\ A \ B \ C,我正在從C:\ A \ B提供javac命令。我無法理解的是,如果我在-cp和實際路徑之間輸入任何隨機字符串,則javac編譯不然。代碼的目的是自己創建目錄,因爲java文件包含了包語句。 – vk7905

+0

-cp選項(classpath)對編譯應用程序沒有影響。在你的情況下,該選項的值不會被使用,因爲你沒有使用任何超出你的包的外部類。如果您向其中提供垃圾,編譯器將無法找到其他外部類。 – Cozzamara

+0

謝謝。我會如何提到我的軟件包之外的類?而且,從上面所說的「感知」--cp總是需要一個論點 - 爲什麼會出現這種情況?以及我在哪裏可以查找有關-cp的其他文檔,並始終需要參數? – vk7905

0

javac的要求列出它必須在命令行編譯所有的文件。你不能只列出一個,除了它自動發現他人。因此,大型現實世界的項目很難以這種方式構建。另外,解決一些其他人已經指出的小錯誤。

因此,學習Eclipse,NetBeans等基於IDE的開發,或者學習Maven,Ant,Make或類似的東西,如果你想成爲命令行主。在這些時候直接調用javac並不常見。

+0

非常真實,但我正在學習核心Java並準備認證。在移動到IDE之前,最好從命令行開始。 – vk7905