智能表登录期间出现 ClassNotFoundException

ClassNotFoundException during smartsheet login

我正在尝试使用他们的 api 登录 smartsheet,但我遇到了由 ClassNotFound 异常引起的 NoClassDefFoundError。

import java.util.ArrayList;
import java.util.Properties;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.io.InputStream;
import java.io.FileInputStream;
import com.smartsheet.api.Smartsheet;
import com.smartsheet.api.SmartsheetFactory;
import com.smartsheet.api.models.Cell;
import com.smartsheet.api.models.Column;
import com.smartsheet.api.models.Row;
import com.smartsheet.api.models.Sheet;
import com.smartsheet.api.models.PagedResult;
import com.smartsheet.api.models.AutomationAction;
import com.google.gson.Gson;
import com.smartsheet.api.SmartsheetBuilder;

public class Main 
{
    //main method for our main class
    public static void main(String args[]) throws Exception
    {
        /*line that throws error*/
        Smartsheet ss = new SmartsheetBuilder().setAccessToken("myAccessToken").build(); 
        // other parts of the program
        return;
    }
}

堆栈跟踪:

    Exception in thread "main" java.lang.NoClassDefFoundError: 
    com/fasterxml/jackson/databind/JsonDeserializer
        at com.smartsheet.api.internal.SmartsheetImpl.
    (SmartsheetImpl.java:279)
        at com.smartsheet.api.SmartsheetBuilder.build(SmartsheetBuilder.java:258)
        at smartsheet.Main.main(Main.java:27)
    Caused by: java.lang.ClassNotFoundException: 
    com.fasterxml.jackson.databind.JsonDeserializer
        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)
        ... 3 more

抛出这个错误有什么特别的原因吗?我已尝试使用 smartsheetfactory 访问 smartsheet,如他们的示例程序中所示,但我遇到了同样的错误。

NoClassDefFoundError 当 class 在编译时存在但由于任何原因在运行时不可用时发生。

诊断和修复这个问题真的很难,因为问题是 class 文件在运行时在 class 路径中不可用。你这些点来解决 NoClassDefFoundError

  1. 确保 class 或包含 class 的 jar 是否可用 class路径。
  2. 如果它在应用程序的 class 路径中可用,那么很可能 class路径正在被覆盖。要解决这个问题,您需要找到 您的应用程序使用的确切 class路径。
  3. 如果应用程序使用多个 class 加载程序,则 classes 由一个 classloader 加载可能无法被其他 class 装载机。

J2EE环境中,即使存在class,也可能会得到NoClassDefFoundError,因为它可能对相应的对象不可见class 装载机。

我收到此错误的原因是因为我的构建中 API 的 JAR 文件有误。 JsonSerializer class 是一个依赖项,正确的 JAR 文件包含依赖项。