grails - Grails 2.0缺陷NoClassDefFound问题

标签 grails groovy dependencies noclassdeffounderror buildconfig

当我尝试从外部JAR使用库时,Grails 2.0中的NoClassDefFound异常出现了问题。

我检查了声明的JAR是否在创建的WAR内,并且不可靠的报告也未对此表示任何问题。

本地添加的JAR或从Maven存储库下载的似乎没有区别。我也尝试清除IVY缓存并清除grails项目,但未成功。

您有任何解决办法的想法吗?

BuildConfig.groovy (的一部分)

grails.project.dependency.resolution = {

    inherits("global") {
        // uncomment to disable ehcache
        // excludes 'ehcache'
    }
    log "error" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve

    repositories {
        inherits true // Whether to inherit repository definitions from plugins
        grailsPlugins()
        grailsHome()
        grailsCentral()

        mavenCentral()
        mavenLocal()
        mavenRepo "http://snapshots.repository.codehaus.org"
        mavenRepo "http://repository.codehaus.org"
        mavenRepo "http://download.java.net/maven/2/"
        mavenRepo "http://repository.jboss.com/maven2/"
    }

    dependencies {

        compile (   "javax:activation:1.0",
                    "javax:mail:1.0",
                    "com.google.gdata:gdata-core:1.0",
                    "com.google.gdata:gdata-client:1.0",
                    "com.google.gdata:gdata-media:1.0",
                    "com.google.gdata:gdata-youtube:2.0"
        )

        runtime (   "javax:activation:1.0",
                    "javax:mail:1.0",
                    "com.google.gdata:gdata-core:1.0",
                    "com.google.gdata:gdata-client:1.0",
                    "com.google.gdata:gdata-media:1.0",
                    "com.google.gdata:gdata-youtube:2.0"
        )
    }

...

}

LibraryController.groovy
import com.google.gdata.client.youtube.YouTubeService
import com.google.gdata.data.youtube.VideoEntry
import com.google.gdata.util.ServiceException

class LibraryController {

    private YouTubeService service
    private static final API_URL = "http://gdata.youtube.com/feeds/api/videos/"

    def index = {
        service = new YouTubeService("app")
    }
}

异​​常
Class
    java.lang.NoClassDefFoundError
Message
    Could not initialize class com.google.gdata.client.youtube.YouTubeServiceClass
java.lang.NoClassDefFoundError

信息
无法初始化com.google.gdata.client.youtube.YouTubeService类

最佳答案

NoClassDefFoundErrorClassNotFoundException不同。获取ClassNotFoundException意味着该类不存在,因此您遇到了直接的jar /依赖关系问题。 NoClassDefFoundError意味着找到了指定的类,但是没有找到它引用的类。追查问题更加令人沮丧,因为JVM不会告诉您缺少了什么。

您需要确保拥有无法加载的类的所有依赖关系,以及它们的所有依赖关系,等等。

关于grails - Grails 2.0缺陷NoClassDefFound问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10053070/

相关文章:

linux - 如何捕获从 shell 脚本抛出的错误并将其显示在 groovy 中?

jquery - 如何在 Play 中的 groovy 模板中使用 jQuery 模板?

java - 如何在java项目中使用commited库

javascript - 创建一个 JS 库并声明其他库所依赖的内容

javascript - Grails如何在没有资源插件的情况下处理静态文件?

Grails httpconnection 到自签名证书

json - 根据给定的JSON文件创建域类

grails - 向 grails 服务添加保存方法的良好可维护方法

Groovy XMLSlurper appendNode - 如何强制它生效?

gradle - 我如何强制gradle构建在每个构建上从Maven存储库重新下载SNAPSHOT插件