2015-05-16 17 views
5

Sto usando https://github.com/sendgrid/sendgrid-java nella mia app. Questo è il mio codiceNoClassDefFoundError in Sendgrid

SendGrid sendgrid = new SendGrid("username", "password"); 
SendGrid.Email email = new SendGrid.Email(); 
email.addTo("[email protected]"); 
email.setFrom("[email protected]"); 
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); 
} 

Questo è il mio codice Maven

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

Durante l'esecuzione di questo codice ottengo il seguente errore.

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) 

Causa principale

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

Sono nuovo di Java, non so che cosa questo significa. Grazie in anticipo.

risposta

2

C'è un problema nella dipendenza di maven per sendgrid. Quindi ho appena copiato la classe dallo https://github.com/sendgrid/sendgrid-java alla mia app. C'erano solo due classi in esso. Inoltre ho copiato la dipendenza da sendgrid-java e aggiunta alla mia app. Ha funzionato.

+1

C'è ancora un problema con la dipendenza Maven? Perché sto vivendo lo stesso al momento (ha funzionato prima di te) – Perneel

+0

@Perneel Ora questo è risolto, ho provato oggi, funziona bene. Basta aggiungere il file jar e iniziare a inviare e-mail – Subash

+0

@Subash quale versione stai correndo? Ho provato con 2.2.2 e ottengo il NoClassDefFoundException – DeiAndrei

1

vi consiglio di fare una dipendenza mvn: albero e la scansione del albero per la seguente classe: org.apache.http.impl.client.HttpClientBuilder

sto migrando da Mandrillo al SendGrid e il motivo è che il mio mandril la dipendenza era "più alta" nell'elenco rispetto alla mia dipendenza sendgrid-java e Mandrill utilizzava una versione 4.2 della risorsa httpclient.

La mia difficoltà è stato quello di aggiungere un esclusione per rimuovere il manufatto da mandrillo

<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> 

Ovviamente per voi potrebbe essere diverso, ma sono pronto a scommettere che stai dipendenza sta portando in una versione precedente f il client http.

+0

questa risposta ha funzionato per me – dopatraman

0
<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> 
+0

Questo aggiunge dipendenze mancanti al codice. L'errore che hai ottenuto è dovuto al fatto che il tuo codice ha perso le dipendenze utilizzate in un'altra dipendenza. Se hai ancora problemi a capire il tuo errore ti suggerisco di leggere la gestione delle dipendenze in Java. – Michael