2016-10-15 93 views
0

我正在練習Oracle Java SE 8考試準備練習1.2,它指導我構建一個主類GreetingsUniverse和三個將由主類初始化的類; Mars,EarthVenus編譯java代碼找不到源文件

我有存儲在位置的com目錄:C:\Users\Chris\Documents\JavaMM

package com.ocajexam.tutorial; 

import com.ocajexam.tutorial.planets.Earth; 
import com.ocajexam.tutorial.planets.Venus; 
import com.ocajexam.tutorial.planets.Mars; 

public class GreetingsUniverse 
{ 
    public static void main (String[] args) 
    { 
     System.out.println("Greetings, Universe!"); 
     Earth e = new Earth(); 
     Mars m = new Mars(); 
     Venus v = new Venus(); 
    } 
} 

package com.ocajexam.tutorial.planets; 

public class Mars 
{ 
    public Mars() 
    { 
     System.out.println("Hello from Mars!"); 
    } 
} 

package com.ocajexam.tutorial.planets; 

public class Earth 
{ 
    public Earth() 
    { 
     System.out.println("Hello from Earth!"); 
    } 
} 

package com.ocajexam.tutorial.planets; 

public class Venus 
{ 
    public Venus() 
    { 
     System.out.println("Hello from Venus!"); 
    } 
} 

練習的目的是確定編譯代碼所需的命令行參數。

我存儲在com\ocajexam\tutorial\GreetingsUniverse Java文件和行星店com\ocajexam\tutorial\planets

我曾嘗試沒有成功的各種解決方案:

javac -d . -cp com\ocajexam\tutorial\planets com\ocajexam\tutorial\GreetingsUniverse.java 

javac -d . -cp com com\ocajexam\tutorial\GreetingsUniverse.java 

我不斷收到以下錯誤:

C:\Users\Chris\Documents\JavaMM>javac -d . -cp com com\ocajexam\tutorial\GreetingsUniverse.java 
com\ocajexam\tutorial\GreetingsUniverse.java:8: error: cannot find symbol 
       Earth e = new Earth(); 
       ^
    symbol: class Earth 
    location: class GreetingsUniverse 
com\ocajexam\tutorial\GreetingsUniverse.java:8: error: cannot find symbol 
       Earth e = new Earth(); 
          ^
    symbol: class Earth 
    location: class GreetingsUniverse 
com\ocajexam\tutorial\GreetingsUniverse.java:9: error: cannot find symbol 
       Mars m = new Mars(); 
       ^
    symbol: class Mars 
    location: class GreetingsUniverse 
com\ocajexam\tutorial\GreetingsUniverse.java:9: error: cannot find symbol 
       Mars m = new Mars(); 
          ^
    symbol: class Mars 
    location: class GreetingsUniverse 
com\ocajexam\tutorial\GreetingsUniverse.java:10: error: cannot find symbol 
       Venus v = new Venus(); 
       ^
    symbol: class Venus 
    location: class GreetingsUniverse 
com\ocajexam\tutorial\GreetingsUniverse.java:10: error: cannot find symbol 
       Venus v = new Venus(); 
          ^
    symbol: class Venus 
    location: class GreetingsUniverse 
6 errors 

有沒有人知道我在哪裏出錯了?

我也試圖產生一個不同的錯誤信息如下:

C:\Users\Chris\Documents\JavaMM>javac -d . com\ocajexam\tutorial\planets\Earth.java;com\ocajexam\tutorial\planets\Mars.java;com\ocajexam\tutorial\planets\Venus.java com\ocajexam\tutorial\GreetingsUniverse.java 

產生以下錯誤:

javac: file not found: com\ocajexam\tutorial\planets\Earth.java;com\ocajexam\tutorial\planets\Mars.java;com\ocajexam\tutorial\planets\Venus.java 
Usage: javac <options> <source files> 
use -help for a list of possible options 

的文件是肯定有的,如果我在planets目錄dir我可以看到它們:

Directory of C:\Users\Chris\Documents\JavaMM\com\ocajexam\tutorial\planets 

16/10/2016 11:33 <DIR>   . 
16/10/2016 11:33 <DIR>   .. 
15/10/2016 21:48    135 Earth.java 
15/10/2016 21:48    132 Mars.java 
15/10/2016 21:48    135 Venus.java 

更新: 經過進一步調試這是剛開陌生人..

我想只能使用命令上半年編譯星球文件:

javac -d . -cp com\ocajexam\tutorial\planets\*.java 

當我檢查這個星球目錄,只有兩個行星已編譯。當我刪除不編譯的java類時,只有一個文件被編譯!

當我使用同樣的命令指定的java文件,我想編譯:

javac -d . -cp com\ocajexam\tutorial\planets\Venus.java 

我得到以下錯誤:

javac: no source files 
Usage: javac <options> <source files> 
use -help for a list of possible options 

我不能做這個,因爲Venus.java任何意義是當我運行/*.java編譯命令來檢測目錄中的任何java文件時編譯的文件之一

+0

你的classpath是'.',而不是'com'。 – tkausl

+0

我也試過,並得到相同的錯誤 – algorhythm

+1

'Venus.java',例如需要它自己的文件。您的問題的格式不會很清楚 –

回答

-1

所有的.java fi使用的文件需要放在類路徑中。即javac -d . -cp com com\ocajexam\tutorial\*.java com\ocajexam\tutorial\planets\*.java

嘗試做:javac -d。 -co com/ocajexam/tutorial/GreetingsUniverse.java com/ocajexam/tutorial/planets/Earth.java com/ocajexam/tutorial/planets/Mars.java com/ocajexam/tutorial/planets/Venus.java

+0

我試過這個,並且仍然得到相同的錯誤 – algorhythm

+0

根本不可能在類路徑上有源文件,並且類文件位置不需要包含路徑的包部分,因爲它是自動添加的。 –

+0

單位:docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html 如果未指定-sourcepath選項,則還會搜索用戶類路徑以查找源文件。 –

0

You需要先編譯所有的類。 javac只能編譯你的主類。使用javac -cp /path/to/file/*.java。星號(*.java)表示編譯文件夾中的所有java類。

+0

這是編譯這些文件,但我仍然遇到同樣的錯誤,當我嘗試編譯主類時 – algorhythm

+0

如果在類路徑中,則不需要手動編譯每個類。編譯器足夠聰明,可以自動包含其他類。 –

+0

然後我不明白爲什麼它會拋出一個錯誤,說它找不到它們 – algorhythm