/ / Errore nella creazione del file jar con Eclipse [duplicato] - java, eclipse, maven, jar, noclassdeffounderror

Errore durante la creazione del file jar con Eclipse [duplicato] - java, eclipse, maven, jar, noclassdeffounderror

Così ho creato un progetto su eclipse e voglio creare un file JAR con esso. La cartella del progetto contiene le seguenti cartelle:

  • src (contiene due pacchetti)
  • Librerie di sistema JRE
  • Librerie di riferimento ("jasypt-1.9.2.jar" e "json_simple-1.1.jar")
  • libs (di nuovo: "jasypt-1.9.2.jar" e "json_simple-1.1.jar")
  • risorse (contenenti immagini e file)

Se vado a: rclick sul nome del progetto -> Proprietà -> Percorso build Java -> Librerie

Vedo entrambe le librerie correttamente aggiunte al percorso di creazione.

Quindi vado a fare clic sul nome del progetto -> esporta-> file JAR e qui esporto tutto (solo per essere sicuro ..!). Poi ho messo il MainClass come punto di ingresso e quindi il file JAR è stato creato senza alcun problema.

Quando estraggo il file JAR (registry.jar), vedo che contiene tutto ciò di cui ha bisogno: [package1, package2, META-INF, libs, resources, .classpath, .project]

Inoltre, il percorso .class è corretto (almeno, mi sembra .. non sicuro al 100%!):

   <?xml version="1.0" encoding="utf-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry exported="true" kind="lib" path="libs/jasypt-1.9.2.jar"/>
<classpathentry exported="true" kind="lib" path="libs/json_simple-1.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

MA POI quando vado ad eseguire il file registry.jar dalla riga di comando (sia Windows che Ubuntu), come questo:

java -jar registry.jar

ottengo:

Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
at ...
at ...
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException
at java.net.URLClassLoader$1.run<Unknown Source>
at ...
at ...
... lots more

Il programma si compila e funziona perfettamente all'interno di Eclipse. Non riesco a capire quale sia il problema ...

risposte:

0 per risposta № 1

Il .classpath il file non ha alcun significato per Java. È usato solo da Eclipse. Java non riconosce che le librerie necessarie sono sotto il lib entrata nel file Jar.

Dovresti includere il percorso delle librerie tramite il comando:

java -jar registry.jar -cp lib

dove in questo caso lib è una cartella che risiede accanto al Jar esportato.

Se stai usando Maven, puoi utilizzare il plugin assembly per generare un file eseguibile Come posso creare un JAR eseguibile con dipendenze usando Maven?.