2012-05-08 32 views
8

Mam dwa problemy dotyczące kompilowania i uruchamiania projektu Eclipse java z wiersza polecenia. Działa to dobrze, gdy jestem uruchomiony z IDE Eclipse. Próbowałem googling, ale naprawdę nie mogłem działać. Każda pomoc jest doceniana.Uruchom projekt Eclipse z wiersza polecenia

Problem 1: Podczas próby kompilacji z lokalizacji innej niż katalog, w której znajduje się plik .java, zgłaszany jest błąd "nie można odczytać: myfile.java". Ale jeśli przejdę do tego katalogu, to kompiluje.
Komenda że dawał jest (jeśli w jakimś innym katalogu):
javac Cp C: \ abc \ src \ XYZ myfile.java
Komenda że dawał gdy w katalogu XYZ:
javac myfile.java
Ten generowane dwa pliki .class myfile.class i Testing_Thread.class (myślę, że to dlatego, że mam wątku w moim kodu)

problem 2: Po mam skompilowane przez przechodzenia do katalogu , kiedy próbuję uruchomić program, pojawia się błąd "Wyjątek w wątku" main "java.lang.NoClassDefFoundError: myfile (zła nazwa: XYZ/myfile.java)" nawet gdy próbuję uruchomić z katalogu XYZ. Ten sam błąd pojawia się, gdy próbuję uruchomić również z innego miejsca.
Komenda że dawał gdy w katalogu XYZ:
java myfile
Komenda że dawał podczas gdy w innym miejscu:
java cp C: \ abc \ src \ XYZ myfile

jestem również załączając hierarchię mojej strukturze katalogów jeśli jest jakiejkolwiek pomocy:
enter image description here

Odpowiedz

8

te przykłady zakładają następującą strukturę źródło:

C:\temp\compile-test\src\a\b\c\D.java 

Gdzie D.java jest:

package a.b.c; 

public class D { } 

Pierwszym problemem, nie można odczytać: myfile.java, to dlatego, że nie jest poprawne użycie opcji wiersza polecenia cp wskazać do twojego kodu źródłowego.

C:\temp\compile-test\src>javac -cp c:\temp\compile-test\src\a\b\c D.java 
javac: file not found: D.java 
Usage: javac <options> <source files> 
use -help for a list of possible options 

ten powinien zamiast być następujące, gdzie javac jest uruchamiany z folderu źródłowego, a możemy użyć względnych ścieżek do plików źródłowych (UWAGA - javac jest uruchamiany z folderu źródłowego tutaj):

C:\temp\compile-test\src>javac a\b\c\D.java 

Albo to, gdzie określamy pełne ścieżki do plików źródłowych, a javac można uruchomić z dowolnego miejsca (uwaga - javac prowadzony jest od C:\ tutaj):

C:\>javac temp\compile-test\src\a\b\c\D.java 

Obie powyższe opcje spowodują, że pliki klas zostaną utworzone w tym samym folderze co źródło. To znaczy.:

C:\temp\compile-test\src\a\b\c\D.class 

Dla drugiego problemu, jeśli spróbujesz uruchomić klasę, która ma nazwę pakietu z „wewnątrz” pakietu, spowoduje to nazwa jest nieprawidłowa (UWAGA - java prowadzony od „wewnątrz” pakiet tutaj):

C:\temp\compile-test\src\a\b\c>java D 
Exception in thread "main" java.lang.NoClassDefFoundError: D (wrong name: a/b/c/D) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
     at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: D. Program will exit. 

Aby uruchomić klasę D, powinieneś być w pakiecie „root” i dostarczyć Fully Qualified Class Name. Tj .:

C:\temp\compile-test\src>java a.b.c.D 
Exception in thread "main" java.lang.NoSuchMethodError: main 

Uwaga uzyskać wyjątek jako klasy D nie posiada główną metodę, a więc nie można go uruchomić. Aby ustalić, dodajemy główne metody:

package a.b.c; 

public class D { 
    public static void main(String[] args) { 
     System.out.println("main"); 
    } 
} 

i ponownie uruchom:

C:\temp\compile-test\src>java a.b.c.D 
main 
+0

Dzięki za wyjaśnienie :) cudownie jasny – sachin11

Powiązane problemy