为什么在向Grails添加插件时会出现ClassNotFoundException?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在向Grails添加插件时会出现ClassNotFoundException?相关的知识,希望对你有一定的参考价值。

我使用Grails 2.5.6(由sdkman设置)和Java 8.当我向依赖项添加一些插件时,例如'org.grails.plugins:quartz:2.0.12'或'org.grails.plugins:grails-java8: 1.2.2'我在启动Grails应用程序时遇到错误。

Stacktrace我得到:

java.lang.NoClassDefFoundError: grails/plugins/Plugin
    at _PluginDependencies$_run_closure2.doCall(_PluginDependencies.groovy:48)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90)
    at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at _GrailsPackage$_run_closure2.doCall(_GrailsPackage.groovy:57)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90)
    at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantMetaClass.processClosure(GantMetaClass.java:81)
    at org.codehaus.gant.GantMetaClass.processArgument(GantMetaClass.java:95)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:128)
    at RunApp$_run_closure1.doCall(RunApp.groovy:28)
    at org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy)
    at org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90)
    at org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185)
    at org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy)
    at gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415)
    at gant.Gant$_dispatch_closure7.doCall(Gant.groovy)
    at gant.Gant.withBuildListeners(Gant.groovy:427)
    at gant.Gant.this$2$withBuildListeners(Gant.groovy)
    at gant.Gant.dispatch(Gant.groovy:415)
    at gant.Gant.this$2$dispatch(Gant.groovy)
    at gant.Gant.invokeMethod(Gant.groovy)
    at gant.Gant.executeTargets(Gant.groovy:591)
    at gant.Gant.executeTargets(Gant.groovy:590)
Caused by: java.lang.ClassNotFoundException: grails.plugins.Plugin
    ... 38 more
答案

您正在尝试使用Grails 3+ Grails 3+插件,但它们不兼容。使用来自https://grails.org/plugins/的插件信息并确保在BuildConfig.groovy中的plugins块中添加依赖项信息,而不是在dependencies块中添加,因为这是针对jar依赖项的(Grails 2插件打包为.zip文件)

看起来Grails 2的Quartz插件的最新版本是v1.0.2,所以你要添加为

plugins {
    ...
    compile ':quartz:1.0.2'
}

Grails 2没有Java 8插件。

以上是关于为什么在向Grails添加插件时会出现ClassNotFoundException?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 h5py 在向数据集添加 3 个可变长度字符串时会抛出错误?

当 Grails BuildConfig 范围没有指定组织时会发生啥?

在向 Twitter/Facebook 进行身份验证后向 Spring Security 进行身份验证

什么是 Grails 插件?安装插件是什么意思?

Grails spring security在向控制器操作发出ajax请求时出现403错误

Grails 插件如何添加自己的 URLMappings?