2016-05-11 23 views
5

Witam Zajmowałem się tym już teraz i nie byłem w stanie naprawić to.java NoClassDefFoundError: com/google/api/client/extensions/java6/auth/oauth2/VerificationCodeReceiver po uruchomieniu słoika, ale nie w IDE

Mam więc prostą aplikację Java, która korzysta z interfejsu API Kalendarza Google, aby otrzymywać z niej zdarzenia.

Kiedy uruchamiam go na IDE (IntelliJ) to działa bez błędów, ale kiedy zbudować i uruchomić plik JAR z wiersza polecenia otrzymuję ten błąd:

Exception in thread "main" java.lang.NoClassDefFoundError: 
      com/google/api/client/extensions/java6/auth/oauth2/VerificationCodeReceiver 
    at info.cantu.smartmirror.Main.main(Main.java:44) 
Caused by: java.lang.ClassNotFoundException: 
      com.google.api.client.extensions.java6.auth.oauth2.VerificationCodeReceiver 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 1 more 

I importowane wymaganych bibliotek przy użyciu maven. Myślę, że źle buduję słoik.

Oto mój MANIFEST.MF:

Manifest-Version: 1.0 
Main-Class: info.cantu.smartmirror.Main 

Oto co mój panel Artefakty wygląda następująco:

Here is what my Artifacts panel looks like:

jakieś pomysły?

+0

Po uruchomieniu z linii poleceń sprawdzenia, czy wszystkie wymagane słoiki z zależnościami są dostępne w ścieżce klasy –

+0

Jak mam to zrobić? @ThusithaThilinaDayaratne –

+0

W kodzie, gdzieś w pobliżu początku kodu, umieść System.out.println ("Ścieżka Classpath [" + System.getProperty ("java.class.path") + "]"). Następnie w linii poleceń: java -cp my-jar.jar, my-oauth.jar, other-jar.jar, etc ... org.main.ClassName – lincolnadym

Odpowiedz

1

Okey I wymyśliłem to. Zrobiłem dwie rzeczy:

Numer 1: Usunąłem google-oauth-client-jetty: 1.20.0 z projektu, przechodząc do Struktura projektu -> Biblioteki -> (wybierając go) -> klikając przycisk minus .

Następnie dodałem nową wersję biblioteki (1.22) this link has the latest version number. Dodałem go przez maven (w tym samym oknie co poprzednio), klikając przycisk plus -> Od Mavena i szukając go

Jednak wydawało się, że nie działa.

Numer 2 (myślę, że to załatwiło sprawę):

W strukturze projektu -> Artefakty -> słoika starałem się budować -> I wybrano bibliotekę z emisji na prawo. Jednak zamiast podwójnego kliknięcia, po prostu umieszcza bibliotekę w wyjściowym katalogu głównym. Kliknąłem prawym przyciskiem myszy i wybrałem "Extract into Output Root", który wyodrębnił wszystkie poszczególne słoiki zawarte w bibliotece i dodał je do wyjściowego katalogu głównego.

Jak pokazano poniżej