2012-11-15 4 views
12

Ho due classi Owning e OwningAccessor. I file si trovano nella stessa directory.javac "impossibile trovare il simbolo" errore con la riga di comando

public class Owning { 
    String _name = ""; 
    public void printBanner() 
    { 
    } 
    public void printOwning(double amount) 
    { 
     printBanner(); 

     //print details 
     System.out.println("name:" + _name); 
     System.out.println("amount:" + amount); 
    } 
} 


public class OwningAccessor { 
    public void access() 
    { 
     Owning o = new Owning(); 
     o.printOwning(500); 
    } 
} 

Quando ho provato a compilare OwningAccessor con javac -cp . OwningAccessor.java, ho avuto errore di compilazione.

symbol : class Owning 
location: class smcho.OwningAccessor 
     Owning o = new Owning(); 
     ^
OwningAccessor.java:6: cannot find symbol 
symbol : class Owning 
location: class smcho.OwningAccessor 
     Owning o = new Owning(); 
       ^

Cosa c'è di sbagliato in questo? Il codice viene compilato correttamente con IDE di eclissi.

+4

sono nella stessa directory? Mostra la struttura della directory del percorso di origine –

+0

Si trovano nella stessa directory. – prosseek

+0

Nessuna riproduzione, funziona qui. Funziona se si compila per la prima volta 'Owning.java'? –

risposta

15

Ok, si supponga di avere il codice distribuito in file come segue

myproject 
├── out 
└── src 
    ├── OwningAccessor.java 
    └── Owning.java 

Vai al prompt dei comandi e cambiare la directory myproject. Una volta che viene inviato il seguente comando:

javac -d out -sourcepath src src/OwningAccessor.java 

Ho appena testato e funziona bene. I vostri classi compilate sarà situato nella cartella out:

. 
├── out 
│   ├── OwningAccessor.class 
│   └── Owning.class 
└── src 
    ├── OwningAccessor.java 
    └── Owning.java 

Compilare una classe attiverà la compilazione di tutte le altre classi dipendenti. Il compilatore li cercherà automaticamente nella cartella src.

+0

questo semplicemente soddisfa il programma, mi chiedo perché non ottengo l'output di systme.out.print in CMD? – Faizan

+0

Il modo migliore è creare un barattolo che si prenderà cura di tutto questo ed è abbastanza semplice. – ramu

12

Assicurarsi che si compila sia Owning.java e OwningAccessor.java, in questo modo:

javac -cp . Owning.java OwningAccessor.java

Eclipse compila tutti i file necessari per voi, ed è per questo non lavorare lì.

+0

java non calcola le dipendenze da solo? –

+2

Lo fa se usi il flag '-sourcepath' nel tuo compilatore –

+0

Sourcepath dovrebbe fare il trucco, sfortunatamente non riesco a testarlo come javac sulla mia macchina si blocca con un ACCESS_VIOLATION su qualsiasi cosa provo a compilare ... – Kninnug

1

provare a fare un esempio corretto sourcepath:

 
javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\MySingleton.java 

javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\Main.java 

In "temp" abbiamo alocate risorse e con -sourcepath indicare dove sono i file .java.