5
votes

Hi I've been dealing with this for a bit now and I haven't been able to fix it.

So I have a simple Java application which uses the Google Calendar API to get events from it.

When I run it on the IDE(IntelliJ) it works with no errors but when I build and run the the JAR from the command line I get this error:

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 imported the required libraries using maven. I think I may be building the jar wrong.

Here's my MANIFEST.MF:

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

Here is what my Artifacts panel looks like:

Here is what my Artifacts panel looks like:

Any ideas?

1
When you run from the command line check if the all required dependency jars are available in the class pathThusitha Thilina Dayaratne
How do I do that? @ThusithaThilinaDayaratneViviano Cantu
In your code, somewhere near the beginning of the code, put System.out.println ( "Classpath ["+System.getProperty("java.class.path")+"]"). Then on the command line, java -cp my-jar.jar;my-oauth.jar;other-jar.jar;etc... org.main.ClassNamelincolnadym
Or you can pack all the dependencies to your jar when creating the jarThusitha Thilina Dayaratne
I thought they were already packed into the jar that's why the pane in the middle of the screenshot has all of those extracted directoriesViviano Cantu

1 Answers

1
votes

Okey I figured it out. I did two things:

Number 1: I removed the google-oauth-client-jetty:1.20.0 from the project by going to Project Structure -> Libraries -> (selecting it) -> clicking the minus button.

Then I added the new version of the library (1.22) this link has the latest version number. I Added it through maven by (in the same window as before) clicking the plus button -> From Maven and searching for it

However it did not seem to work.

Number 2(I THINK THIS DID THE TRICK):

In Project Structure -> Artifacts -> The JAR I was trying to build -> I selected the library with the issue on the the right. However, instead of double clicking it which simply puts the library in the output root. I right clicked and selected "Extract Into Output Root" which extracted all the individual jars included in the library and added them to the output root.

As shown below