Grails2.0依赖性NoClassDefFound问题

Grails2.0依赖性NoClassDefFound问题,grails,groovy,dependencies,noclassdeffounderror,buildconfig,Grails,Groovy,Dependencies,Noclassdeffounderror,Buildconfig,当我试图从外部JAR使用库时,Grails2.0中的NoClassDefFound异常出现了问题 我已经检查过声明的罐子是否在创建的战争中,而且grials Dependences报告没有标记任何问题 本地添加的JAR或从Maven repo下载的JAR似乎没有什么区别。我还尝试清理常春藤缓存和grails项目,但没有成功 你知道怎么修吗 BuildConfig.groovy(部分) LibraryController.groovy import com.google.gdata.clien

当我试图从外部JAR使用库时,Grails2.0中的NoClassDefFound异常出现了问题

我已经检查过声明的罐子是否在创建的战争中,而且grials Dependences报告没有标记任何问题

本地添加的JAR或从Maven repo下载的JAR似乎没有什么区别。我还尝试清理常春藤缓存和grails项目,但没有成功

你知道怎么修吗


BuildConfig.groovy(部分)


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.youtube服务类

您已在编译和运行时范围内声明了所有依赖项。每个依赖项只能声明一次。如果您在编译范围内声明依赖项,它在运行时也将可用。因为编译需要这个类,所以应该将com.google.gdata:gdata-youtube:2.0保留在“compile”下,并将其从“runtime”中删除

可用作用域的描述,摘自:

  • 生成:仅生成系统的依赖项
  • 编译:编译步骤的依赖项
  • 运行时:运行时需要依赖项,但编译不需要依赖项(见上文)
  • 测试:测试所需的依赖项,但不是在运行时(见上文)
  • 提供:开发时需要依赖项,但在战争部署期间不需要

NoClassDefFoundError
ClassNotFoundException
不同。获取一个
ClassNotFoundException
意味着该类不存在,因此您有一个简单的jar/依赖性问题
NoClassDefFoundError
表示找到了指定的类,但找不到它引用的类。这是一个更令人沮丧的问题,因为JVM没有告诉您缺少什么


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

我通常只会使用“jar-tf”检查war文件中的jar文件,以双重确保包含类文件YouTubeServiceClass。您何时收到此错误?在运行时使用
run-app
?是的,我正在使用run-app,进入库视图时出现异常。我在任何repo中都找不到javax:mail:1.0。当然不是javax.mail:mail?我也没有在任何repo中找到google JAR。它们是否手动安装到本地maven缓存中?是否使用了4个自定义maven repos?我只留下了“编译”范围,但仍然出现异常。感谢您的解释。经过研究,我发现com.google.common.collect.Maps不见了。添加guava库()修复了这个问题。但由于兼容性问题,我必须将番石榴降级到10.0.1:
Class
    java.lang.NoClassDefFoundError
Message
    Could not initialize class com.google.gdata.client.youtube.YouTubeServiceClass
java.lang.NoClassDefFoundError