【问题标题】:NoClassDefFoundError in SendgridSendgrid 中的 NoClassDefFoundError
【发布时间】:2015-05-16 12:38:50
【问题描述】:

我在我的应用程序中使用https://github.com/sendgrid/sendgrid-java。这是我的代码

SendGrid sendgrid = new SendGrid("username", "password");
SendGrid.Email email = new SendGrid.Email();
email.addTo("user@domain.com");
email.setFrom("another@domain.com");
email.setSubject("Hello World");
email.setText("My first email with SendGrid Java!");

try {
  SendGrid.Response response = sendgrid.send(email);
  System.out.println(response.getMessage());
}
catch (SendGridException e) {
  System.err.println(e);
}

这是我的 maven 代码

<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>2.2.0</version>
</dependency>

运行此代码时出现以下错误。

java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:497)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)

根本原因

java.lang.NoClassDefFoundError: org/apache/http/impl/client/HttpClientBuilder
com.sendgrid.SendGrid.<init>(SendGrid.java:67)

我是java新手,我不知道这是什么意思。提前致谢。

【问题讨论】:

    标签: java sendgrid


    【解决方案1】:

    sendgrid 的 maven 依赖存在问题。所以我只是将课程从https://github.com/sendgrid/sendgrid-java 复制到我的应用程序中。里面只有两个班。我还从 sendgrid-java 复制了依赖项并添加到我的应用程序中。它奏效了。

    【讨论】:

    • maven依赖还有问题吗?因为我现在也有同样的经历(在你之前工作过)
    • @Perneel 现在这个问题已经解决了,我今天试过了,它工作正常。只需添加 jar 文件并开始发送电子邮件
    • @Subash 你运行的是什么版本?我用 2.2.2 尝试过,我得到了 NoClassDefFoundException
    • @DeiAndrei 使用 2.2.1 我已经测试过了,它工作正常
    • 我正在使用带有 Gradle 的 2.2.1 获得 NoClassDefFoundException
    【解决方案2】:

    我建议做一个 mvn dependency:tree 并扫描您的树以查找以下类:org.apache.http.impl.client.HttpClientBuilder

    我正在从 Mandrill 迁移到 SendGrid,原因是我的 mandril 依赖项在列表中比我的 sendgrid-java 依赖项“更高”,并且 Mandrill 使用了 4.2 版的 httpclient 工件。

    我的解决方法是添加一个排除项以从 Mandrill 中删除该工件

        <dependency>
            <groupId>com.mandrillapp.wrapper.lutung</groupId>
            <artifactId>lutung</artifactId>
            <version>0.0.4</version>
            <exclusions>
                <exclusion>
                    <artifactId>httpclient</artifactId>
                    <groupId>org.apache.httpcomponents</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    

    显然对你来说可能会有所不同,但我敢打赌你的依赖是为 http 客户端引入了旧版本。

    【讨论】:

      【解决方案3】:
          <dependency>
              <groupId>com.sendgrid</groupId>
              <artifactId>sendgrid-java</artifactId>
              <version>4.0.1</version>
          </dependency>
      
          <dependency>
              <groupId>com.sendgrid</groupId>
              <artifactId>java-http-client</artifactId>
              <version>4.1.0</version>
          </dependency>
      

      【讨论】:

      • 这会将缺失的依赖项添加到您的代码中。您得到的错误是因为您的代码错过了在另一个依赖项中使用的依赖项。如果你仍然无法理解你的错误,我建议你阅读 Java 中的依赖管理。
      【解决方案4】:

      我已经解决了。 我已将 maven 依赖项从 service/pom.xml 移至父模块 pom.xml

      mvn dependency:tree 查看每个模块中的依赖关系

      仅使用以下依赖项

      <dependency>
          <groupId>com.sendgrid</groupId>
          <artifactId>sendgrid-java</artifactId>
          <version>4.0.1</version>
      </dependency>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-11
        • 2014-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        相关资源
        最近更新 更多