grails run-app上的NoClassDefFoundError(Grails 2.5.0)

时间:2015-03-30 00:49:05

标签: grails

当我尝试使用Grails 2.5.0运行新创建的项目时:

$ grails create-app test250
$ cd test250
$ grails run-app

我收到以下错误:

| Running Grails application
| Error java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
| Error     at org.grails.plugins.tomcat.fork.ForkedTomcatServer.<clinit>(ForkedTomcatServer.groovy:44)
| Error Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
| Error     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
| Error     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
| Error     at java.security.AccessController.doPrivileged(Native Method)
| Error     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
| Error     at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
| Error     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
| Error     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
| Error     ... 1 more
Exception in thread "main" 
| Error Forked Grails VM exited with error

我的机器正在运行OSX 10.10.2,我有几个项目在Grails 2.2.5上运行没有问题。

2 个答案:

答案 0 :(得分:1)

看起来问题是Tomcat插件间接使用了commons-logging(ForkedTomcatServer扩展了引用ForkedGrailsProcess的Grails org.apache.commons.logging.Log类,但它不是导出,它不是Grails依赖。

它是资产管道插件的间接依赖关系,因此应该使jar可用并解决大多数用户的错误。您是否将Asset-pipeline作为BuildConfig.groovy中的依赖插件删除了?

你应该能够通过在BuildConfig.groovy中显式添加commons-logging的依赖项来使事情正常工作:

dependencies {
   runtime 'commons-logging:commons-logging:1.2'
   ...
}

答案 1 :(得分:0)

使用GVM(如Jeff指出)解决问题,以管理我机器上安装的不同Grails版本。