grails 运行-app (Grails 2.5.0) 上的 NoClassDefFoundError
NoClassDefFoundError on grails run-app (Grails 2.5.0)
当我尝试 运行 使用 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.run(URLClassLoader.java:366)
| Error at java.net.URLClassLoader.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
我的机器是 运行ning OSX 10.10.2,我有几个项目 运行ning 在 Grails 2.2.5 上没有问题。
看起来问题是 Tomcat 插件间接使用了 commons-logging(ForkedTomcatServer
扩展了 Grails ForkedGrailsProcess
class 引用 org.apache.commons.logging.Log
) 但它没有导出,也不是 Grails 依赖项。
它是 asset-pipeline 插件的间接依赖项,因此应该使 jar 可用并解决大多数用户的错误。您是否在 BuildConfig.groovy 中删除了 asset-pipeline 作为依赖插件?
您应该能够通过在 BuildConfig.groovy:
中显式添加公共日志的依赖项来让事情正常进行
dependencies {
runtime 'commons-logging:commons-logging:1.2'
...
}
使用 GVM(正如 Jeff 指出的那样)管理我机器上安装的不同 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.run(URLClassLoader.java:366)
| Error at java.net.URLClassLoader.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
我的机器是 运行ning OSX 10.10.2,我有几个项目 运行ning 在 Grails 2.2.5 上没有问题。
看起来问题是 Tomcat 插件间接使用了 commons-logging(ForkedTomcatServer
扩展了 Grails ForkedGrailsProcess
class 引用 org.apache.commons.logging.Log
) 但它没有导出,也不是 Grails 依赖项。
它是 asset-pipeline 插件的间接依赖项,因此应该使 jar 可用并解决大多数用户的错误。您是否在 BuildConfig.groovy 中删除了 asset-pipeline 作为依赖插件?
您应该能够通过在 BuildConfig.groovy:
中显式添加公共日志的依赖项来让事情正常进行dependencies {
runtime 'commons-logging:commons-logging:1.2'
...
}
使用 GVM(正如 Jeff 指出的那样)管理我机器上安装的不同 Grails 版本解决了问题。