2012-11-15 13 views
12

Posiadam dwie klasy Owings i OwtingsAccessor. Pliki znajdują się w tym samym katalogu.Błąd javac "nie można odnaleźć symbolu" z linią komend

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); 
    } 
} 

Kiedy próbowałem skompilować OwningAccessor z javac -cp . OwningAccessor.java, mam błąd kompilacji.

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(); 
       ^

Co jest nie tak z tym? Kod kompiluje dobrze pod IDE Eclipse.

+4

czy znajdują się w tym samym katalogu? Pokaż strukturę katalogów ścieżki źródłowej –

+0

Są one w tym samym katalogu. – prosseek

+0

Brak repro, działa tutaj. Czy to działa, jeśli najpierw skompilujesz "Owning.java"? –

Odpowiedz

15

Ok, załóżmy masz kodu rozproszonego w plikach następująco

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

Przejdź do wiersza polecenia i zmień katalog myproject. Gdy wydasz następującą komendę:

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

Właśnie przetestowałem to i działa dobrze. Twoje skompilowane klasy będą zlokalizowane w folderze out:

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

Kompilacja jedna klasa spowoduje kompilację wszystkich innych klas zależnych. Kompilator automatycznie wyszuka je w folderze src.

+0

to po prostu spełnia program, zastanawiam się, dlaczego nie otrzymuję wyjście systme.out.print w CMD? – Faizan

+0

Najlepszym sposobem jest stworzenie słoika, który zajmie się tym wszystkim i jest dość prosty. – ramu

12

Upewnij się skompilować zarówno Owning.java i OwningAccessor.java, tak:

javac -cp . Owning.java OwningAccessor.java

Eclipse kompiluje wszystkie wymagane pliki dla Ciebie, dlatego nie działa tam.

+0

Czy java nie oblicza samodzielnie zależności? –

+2

Dzieje się tak, jeśli używasz flagi '-sourcepath' w kompilatorze –

+0

Ścieżka źródłowa powinna wystarczyć, niestety nie mogę przetestować jej jako javac na moich komputerach z ACCESS_VIOLATION na czymkolwiek próbuję skompilować ... – Kninnug

1

starać się poprawną przykład 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 

W "temp" my alocate zasobów i -sourcepath wskazać, gdzie są pliki .java.

Powiązane problemy