当我尝试使用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上运行,没有出现问题。
问题似乎是Tomcat插件间接使用了commons日志记录(ForkedTomcatServer
扩展了引用org.apache.commons.logging.Log
的Grails ForkedGrailsProcess
类),但它没有导出,也不是Grails依赖项。
它是资产管道插件的间接依赖项,因此应该使jar可用,并为大多数用户解决bug。您是否删除了BuildConfig.groovy中作为依赖插件的资产管道?
您应该能够通过在BuildConfig.groovy:中显式添加对commons日志记录的依赖来使事情正常工作
dependencies {
runtime 'commons-logging:commons-logging:1.2'
...
}
使用GVM(正如Jeff所指出的)来管理安装在我的机器上的不同Grails版本,解决了这个问题。