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 № 1The .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?.