【问题标题】:Grails Project missing Java library at runtimeGrails 项目在运行时缺少 Java 库
【发布时间】:2013-07-04 00:08:21
【问题描述】:

我试图将一些 Java 库(AWS SDK for Java、Apache Commons Math 等)添加到我的 Grails 项目中,因为我的一些 Java 源代码(位于 src/java 中)具有依赖项。通过遵循这个答案,我能够通过将 jar 文件添加到 /lib 文件夹并将其添加到构建路径来解决编译错误,如下所示:Add Java Libraries to a Netbeans Grails Project

但是,当我在运行时从控制器调用 Java 源代码时,它无法找到我添加的 Java 库,显示 NoClassDefFoundError。我应该在 BuildConfig.groovy 文件中添加一些内容吗?我不确定要添加到依赖项中的 jar 文件的命名约定是什么。

【问题讨论】:

    标签: grails libraries


    【解决方案1】:

    你提到的问题是5岁。你应该使用更新的资源:)

    现在首选的方法是使用 BuildConfig.groovy 中的依赖项,并让 Grails(通过 Ivy 或 Maven)为您下载一次 jar,然后将它们重用于各种项目。

    语法是什么并不总是很明显,我发现http://mvnrepository.com/ 是一个很好的资源。例如,如果您搜索“commons math”并点击进入http://mvnrepository.com/artifact/org.apache.commons/commons-math,您会看到几个版本。单击版本 2.2,您将看到 Maven 依赖项 XML,但您可以单击 Gradle 选项卡,它与 Grails 所需的类似。所以我会添加

    dependencies {
       compile 'org.apache.commons:commons-math:2.2'
    }
    

    如有必要,将 compile 更改为 runtimebuild 等,具体取决于您在构建过程中对 jar 的需求。

    在极少数情况下,您的 jar 文件在 Maven 存储库中不可用(例如,您公司的共享库),那么您可以将 jar 文件放在 lib 目录中。如您所见,Grails 不会自动检测它(这是从 2.0 版开始的)。但是您可以运行 grails compile --refresh-dependencies 将您的 jar 添加到类路径中。

    【讨论】:

    • 感谢 Maven 存储库的链接。我确实尝试了这两种方法,但尽管在 BuildConfig.groovy 中设置了依赖项,但仍然出现此 NoClassDefFoundError。 Java 源代码本身运行良好,但在被 Grails 控制器调用时就不行了。
    • NoClassDefFoundError 表示您请求的类在那里,但它所依赖的一个或多个类不存在。所以你会看到代码编译得很好,但在运行时失败了。它很容易与ClassNotFoundException 混淆。使用 mvnrepository.com 查看您可能缺少的其他依赖项(尽管如果使用 BuildConfig,它们应该由 Ivy/Maven 传递加载)。
    【解决方案2】:

    事实证明,AWS Java SDK 具有尚未安装且我不知道的依赖项(Apache HTTP 客户端)。

    这是我必须为我的 BuildConfig.groovy 文件配置的内容

    dependencies {
       runtime 'org.apache.httpcomponents:httpclient:4.2.5'
       runtime 'com.amazonaws:aws-java-sdk:1.4.7'
    }
    

    AWS Java SDK 1.4.7 的所有依赖项都可以在这里找到:http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.4.7。 HTTP 客户端之外的所有依赖项都已为我安装,但可能不适用于您的 Grails 设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2016-04-16
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多