2013-07-02 22 views
0

我试图向我的Grails项目添加一些Java库(适用于Java的AWS开发工具包,Apache Commons Math等),因为我的一些Java源代码(放在src/java中)依赖。通过遵循这个答案,我可以通过将jar文件添加到/ lib文件夹并将其添加到构建路径来解决编译错误,这里回答如下:Add Java Libraries to a Netbeans Grails ProjectGrails项目在运行时缺少Java库

但是,当我从我的控制器在运行时,它无法找到我添加的Java库,显示一个NoClassDefFoundError。我应该在BuildConfig.groovy文件中添加一些东西吗?我不确定将jar文件的名称约定添加到依赖关系中。

回答

2

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

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

语法并不总是很明显,我发现http://mvnrepository.com/是一个很好的资源。例如,如果您搜索“公用数学”并点击进入http://mvnrepository.com/artifact/org.apache.commons/commons-math,您会看到几个版本。点击版本2.2,你会看到Maven依赖XML,但是你可以点击Gradle标签,它会和你需要的Grails类似。所以,我想补充

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

,并在必要时改变compileruntimebuild等,这取决于你的需要在构建过程中的罐子。

在极少数情况下,您确实有一个在Maven仓库中不可用的jar(例如您公司的共享库),那么您可以将jar文件放在lib目录中。正如你所看到的,Grails不会自动检测它(这是2.0版本)。但是您可以运行grails compile --refresh-dependencies以将您的jar添加到类路径中。

+0

感谢您的链接到Maven存储库。尽管在BuildConfig.groovy中设置了依赖关系,但我仍尝试使用这两种方法,但仍然存在此NoClassDefFoundError。 java源代码本身运行得很好,但在Grails控制器调用时没有。 – kennyzlei

+0

'NoClassDefFoundError'意味着你请求的类在那里,但是它所依赖的一个或多个类不是。所以你会看到代码编译正常,但在运行时失败。它很容易与'ClassNotFoundException'混淆。使用http://mvnrepository.com/来查看可能缺少的其他依赖项(尽管如果使用BuildConfig它们应该由Ivy/Maven传递加载)。 –

0

我的问题是事实证明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设置。