dependency management - Grails log4j SMTPAppender NoClassDefFoundError -


how configure smtpappender in new grails 2.4.5 project? receive noclassdeffounderror when running in development environment:

| error log4j:error error initializing log4j: javax/mail/message

| error java.lang.noclassdeffounderror: javax/mail/message

gist: detailed stacktrace

i have configured dependency javax.mail , configured log4j follows:

dependencies {     provided 'javax.mail:mail:1.4.7' }  log4j = {     appenders {         appender new org.apache.log4j.net.smtpappender(             name: 'smtp',             layout: pattern(conversionpattern: '%d{mm-dd-yyyy hh:mm:ss.sss} [%t] %c %m %x%n%p: %m%n')             to: 'example@example.com',             from: 'example@example.com',             subject: 'grails message',             smtphost: '127.0.0.1')         )     } } 

github: example project

i know post old, struggled same till found solution @ least working me (not smtpappender sentry - same purpose).

the explanation found errors receiving

error log4j:error error initializing log4j: javax/mail/message

error java.lang.noclassdeffounderror: javax/mail/message

come piece of code:

dependencies {     provided 'javax.mail:mail:1.4.7' } 

the thing when compile things work, when try grails run-app receive error.

the explanation found log4j initializes before maven dependency resolved.

i wrote comment of how i've used sentry appender. https://github.com/getsentry/raven-java/issues/184#issuecomment-259432057

basically, instead of adding maven dependency i've downloaded java file, , added grails project in src/java

so sentry por example added sentryappender.java my.package.sentry in log4j added:

  appenders {     environments {         // block set use stock raven sentryappender in         // production. sentry appender runs kinds of         // class loading weirdness when used in forked grails environment         production {             appender new my.package.sentry.sentryappender(                 name: 'sentry',                 dsn: 'redacted',                                 threshold: org.apache.log4j.level.warn             )         }          // uncomment block if need test sentry         // in dev environment         development {             appender new my.package.sentry.sentryappender(                 name: 'sentry',                 dsn: 'redacted',                                 threshold: org.apache.log4j.level.warn             )         }     }        }    root {     warn 'stdout', 'sentry'     error 'stdout', 'sentry'     additivity = false   } 

in way, not depend on external dependency.

i guess similar mail dependency , add java files src folder.

i hope helps!


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -