Grails log4j SMTPAppender NoClassDefFoundError

jam*_*man 5 grails dependency-management

如何在新的Grails 2.4.5项目中配置SMTPAppender?在开发环境中运行时,我收到NoClassDefFoundError:

| 错误log4j:ERROR初始化log4j时出错:javax/mail/Message

| 错误java.lang.NoClassDefFoundError:javax/mail/Message

要点:详细的堆栈跟踪

我已经为javax.mail配置了依赖项并配置了log4j,如下所示:

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')
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

GitHub:示例项目

Bur*_*ith 1

这看起来很奇怪 - 您是否无意中将依赖项块和log4j此处的块组合在一起,或者它们是否位于应用程序中的同一文件中?依赖项应该在 中BuildConfig.groovylog4j块应该在 中Config.groovy。而且,它不应该是log4j {,而是应该是log4j = {

这很可能是一个时间问题。如果Config.groovy在Javamail依赖关系解决之前解析,将会失败。尝试注释掉引用 Javamail 类并运行grails clean和 的部分grails compile。这将解决依赖关系并将该 jar 添加到类路径中。然后您可以取消注释该代码并grails compile再次运行。