/ / Błąd podczas tworzenia pliku JAR za pomocą Eclipse [duplicate] - java, eclipse, maven, jar, noclassdeffounderror

Błąd podczas budowania pliku jar za pomocą Eclipse [duplicate] - java, eclipse, maven, jar, noclassdeffounderror

Więc stworzyłem projekt na Eclipse i chcę utworzyć z nim plik JAR. Folder projektu zawiera następujące foldery:

  • src (zawiera dwa pakiety)
  • Biblioteki systemowe JRE
  • Referenced Libraries ("jasypt-1.9.2.jar" i "json_simple-1.1.jar")
  • libs (ponownie: "jasypt-1.9.2.jar" i "json_simple-1.1.jar")
  • zasoby (zawierające obrazy i pliki)

Jeśli przejdę do: rclick na nazwie projektu -> Właściwości -> ścieżka kompilacji Java -> biblioteki

Widzę, że obie biblioteki zostały poprawnie dodane do ścieżki budowania.

Potem idę do rclick na nazwie projektu -> eksport-> Plik JAR i tutaj eksportuję wszystko (tylko po to, żeby się upewnić ...!). Następnie umieszczam MainClass jako punkt wejścia, a następnie plik JAR jest tworzony bez żadnego problemu.

Kiedy wyodrębniam plik JAR (register.jar), widzę, że zawiera on wszystko, czego potrzebuje: [pakiet1, pakiet2, META-INF, biblioteki, zasoby, .classpath, .project]

Również .classpath jest poprawna (przynajmniej wydaje mi się .. nie jest w 100% pewna!):

   <?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>

ALE TO, kiedy idę do wykonania pliku registry.jar z wiersza poleceń (zarówno Windows, jak i Ubuntu), na przykład:

java -jar registry.jar

dostaję:

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

Program kompiluje się i działa idealnie w czasie zaćmienia. Po prostu nie wiem, o co chodzi ...

Odpowiedzi:

0 dla odpowiedzi № 1

The .classpath plik nie ma znaczenia dla Javy. Jest używany tylko przez Eclipse. Java nie rozpoznaje, że potrzebne biblioteki znajdują się pod lib wpis w pliku Jar.

Będziesz musiał podać ścieżkę bibliotek za pomocą polecenia:

java -jar registry.jar -cp lib

gdzie w tym przypadku lib jest folderem znajdującym się obok eksportowanego słoika.

Jeśli używasz Mavena, możesz zainstalować wtyczkę, aby wygenerować plik wykonywalny Jak mogę utworzyć plik wykonywalny JAR z zależnościami za pomocą Mavena?.