Rularea programului Java din linia de comandă Linux (Programare, Java, Linux, Linie De Comandă)

Altober a intrebat.

Nu sunt foarte experimentat cu java și asta mă înnebunește. Am scris un program java FileManagement și am nevoie să îl execut din linia de comandă.

Îl pot compila din linia de comandă cu javac FileManagement/*.java ceea ce va crea toate clasele din folderul respectiv, dar când încerc java FileManagement.Main se afișează :

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

Chestia este că am încercat aceeași procedură pe un computer la distanță și funcționează bine. Pe al meu nu funcționează.

Comentarii

4 răspunsuri
Bart Kiers

În cazul în care dvs. Main clasa este într-un pachet numit FileManagement, atunci încercați:

java -cp . FileManagement.Main

în folderul părinte al pachetului FileManagement folder.

Dacă clasa dvs. Main clasa nu se află într-un pachet (pachetul implicit), atunci cd în folderul FileManagement și încercați:

java -cp . Main

Mai multe informații despre CLASSPATH și despre modul în care JRE găsește clasele:

Comentarii

  • @Altober, mă bucur să aud asta. Vă încurajez să citiți puțin despre classpath pentru a ști de ce nu a funcționat. –  > Por Bart Kiers.
  • @AnsersonGreen, furnizați doar parametrii după Main. –  > Por Bart Kiers.
user001

Băieți, să înțelegem sintaxa acesteia.

  1. Dacă fișierul de clasă este prezent în directorul curent.

    java -cp . nume fișier

  2. Dacă fișierul de clasă este prezent în Dir. Mergeți la Parent Dir și introduceți cmd-ul de mai jos.

    java -cp . dir1.dir2.dir3.fileName

  3. Dacă există o dependență de jar-uri externe, atunci,

    java -cp .:././jarNume1:./jarNume2 numefișier

    Sper că acest lucru vă ajută.

knocte

(Acesta este răspunsul KISS.)

Să spunem că aveți mai multe fișiere .java în directorul curent:

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

Să spunem că fiecare dintre ele are un main() metodă (deci sunt programe, nu librării), atunci pentru a le compila faceți:

javac *.java -d .

Acest lucru va genera atâtea subfoldere câte „pachete” sunt asociate fișierelor .java. În cazul meu, toate fișierele .java se aflau sub același nume de pachet packageName, astfel încât a fost generat un singur dosar cu acest nume, deci pentru a le executa pe fiecare dintre ele:

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

Thomas Mueller

Care este numele pachetului clasei dumneavoastră? Dacă nu există un nume de pachet, atunci cel mai probabil soluția este:

java -cp FileManagement Main

Comentarii

  • Vă mulțumim pentru timpul acordat Bart K a dat aceeași soluție și a funcționat. Vă mulțumim din nou Thomas –  > Por Altober.
  • Dacă clasa principală a fost numită „Main” (fără pachet) și dacă clasa a fost pur și simplu în directorul numit „FileManagement”. Același lucru ca și cd FileManagement ; java cp . Main –  > Por Thomas Mueller.
  • Ah, scuze, ați adăugat FileManagement la classpath. Am crezut că ați încercat să executați FileManagement și a dat Main ca parametru de linie de comandă. –  > Por Bart Kiers.