2010-09-11 18 views
19

Non ho molta esperienza con java e questo mi sta facendo impazzire. Ho scritto un programma java FileManagement e ho bisogno di eseguirlo dalla riga di comando.Esecuzione di un programma Java da Command Line Linux

posso compilarlo dalla linea di comando con javac FileManagement/*.java che creerà tutte le classi in quella cartella, ma quando provo java FileManagement.Main si dice:

Exception in thread "main" java.lang.NoClassDefFoundError: FileManagement/Main

Il fatto è che ho provato la stessa procedura in un computer remoto e sta funzionando bene. Non sta funzionando sul mio.

+0

http://www.skylit.com/javamethods/ faqs/javaindos.html ha una buona introduzione per i principianti. – Pramod

+0

@Pramod. Quel collegamento è per Windows però ... – Larry

risposta

20

Se la classe Main è in un pacchetto chiamato FileManagement, quindi provare:

java -cp . FileManagement.Main 

nella cartella principale della cartella FileManagement.

Se la classe Main non è in un pacchetto (il pacchetto di default) allora cd alla cartella FileManagement e provare:

java -cp . Main 

Maggiori informazioni su CLASSPATH e come il JRE trovare classi:

+0

Lavoro !!!! Molte grazie. Problema risolto – Altober

+0

@Altober, bello saperlo. Vi incoraggio a leggere un po 'del classpath in modo da sapere perché non ha funzionato. –

+0

cool grazie per il tuo tempo – Altober

1

Qual è il nome del pacchetto della classe? Se non c'è il nome del pacchetto, allora molto probabilmente la soluzione è:

java -cp FileManagement Main 
+0

Grazie per il tuo tempo, Bart K ha dato la stessa soluzione e ha funzionato. Grazie ancora Thomas – Altober

+1

Se la classe principale è stata chiamata "Main" (senza pacchetto), e se la classe era semplicemente nella directory denominata "FileManagement". Lo stesso di cd FileManagement; java cp. Main –

+0

Ah, scusa, hai aggiunto 'FileManagement' al classpath. Pensavo che avessi provato ad eseguire 'FileManagement' e dato' Main' come parametro della riga di comando. –

5

Ragazzi capiamo la sintassi di esso.

  1. Se il file di classe è presente nella directory corrente.

    java -cp. fileName

  2. Se il file di classe è presente in Dir. Vai alla cartella principale e inserisci sotto cmd.

    java -cp. dir1.dir2.dir3.fileName

  3. Se c'è una dipendenza da vasi esterni poi,

    java -cp:. ./ jarName1: ./ jarName2 nomeFile

    Spero che questo aiuti.

1

(Questa è la risposta dei KISS.)

Diciamo che dispone di più.file java nella directory corrente:

$ ls -1 *.java 
javaFileName1.java 
javaFileName2.java 

Diciamo che ognuno di loro ha un metodo main() (in modo che siano i programmi, non librerie), quindi per compilare loro fare:

javac *.java -d . 

Questo genererà come molte sottocartelle come "pacchetti" a cui sono associati i file .java. Nel mio caso tutti i file java dove al suo interno sotto lo stesso nome del pacchetto packageName, in modo che solo una cartella è stata generata con quel nome, in modo da eseguire ciascuno di essi:

java -cp . packageName.javaFileName1 
java -cp . packageName.javaFileName2