【问题标题】:Grails 1.4.0.M1 (with STS 2.7.0.M2) NoClassDefFoundError for GantBuilderGrails 1.4.0.M1(使用 STS 2.7.0.M2)GantBuilder 的 NoClassDefFoundError
【发布时间】:2011-06-16 06:06:58
【问题描述】:

我刚刚升级到...

  • Grails 1.4.0.M1
  • Groovy 1.8.0
  • STS 版本:2.7.0.M2 构建 ID:201106101000 - 适用于 Mac 的 64 位 Cocoa 版本
  • 我有 OS X 10.5.8。使用 JVM 1.5.0

当我在现有项目上运行 grails 命令时,例如“create-app”或“upgrade”,我得到 GantBuilder 的以下 NoClassDefFoundError。 (完整跟踪见下文)

this forum 针对类似问题提出的解决方案是缺少 gant_groovy1.8-1.9.5.jar。我已经将它直接添加到项目中,也添加到了 groovy/lib 文件夹(并转到 STS -> 首选项 -> Groovy -> 编译器 -> 更新所有 Groovy 类路径容器),但我仍然收到错误消息。 (当我将 gant_groovy1.8-1.9.5.jar 添加到 groovy/lib 时,它是一个单独的 groovy 下载,我不确定 STS 将哪个 groovy/lib 文件夹用于内部 grails shell 命令或如何查看 STS groovy类路径)

found org.springframework#spring-test;3.1.0.M1 in default
:: resolution report :: resolve 2068ms :: artifacts dl 119ms
---------------------------------------------------------------------
|                  |            modules            ||   artifacts   |
|       conf       | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
|       test       |   74  |   0   |   0   |   0   ||   74  |   0   |
---------------------------------------------------------------------
Script threw exception
java.lang.NoClassDefFoundError: org.codehaus.gant.GantBuilder
    at org.codehaus.gant.GantBinding.class$(GantBinding.groovy)
    at org.codehaus.gant.GantBinding.$get$$class$org$codehaus$gant$GantBuilder(GantBinding.groovy)
    at org.codehaus.gant.GantBinding.<init>(GantBinding.groovy:41)
    at org.codehaus.groovy.grails.cli.GrailsScriptRunner.callPluginOrGrailsScript(GrailsScriptRunner.java:448)
    at org.codehaus.groovy.grails.cli.GrailsScriptRunner.runInteractive(GrailsScriptRunner.java:377)
    at org.codehaus.groovy.grails.cli.GrailsScriptRunner.executeCommand(GrailsScriptRunner.java:308)
    at org.codehaus.groovy.grails.cli.GrailsScriptRunner.main(GrailsScriptRunner.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.rootLoader(GrailsStarter.java:234)
    at org.codehaus.groovy.grails.cli.support.GrailsStarter.main(GrailsStarter.java:262)

有人有什么想法吗?

【问题讨论】:

  • 不好意思,我的回答有帮助吗?放了几天假,回来的时候,你好像还有烦恼,只是忘记跟了。您无需将我的答案标记为已接受,因为这是唯一答案。
  • @Hoang,感谢您的回答确实有帮助。我克服了几个额外的问题,并通过编辑您的答案编写了解决方案。请接受编辑,以便所有人都可以使用。
  • 抱歉,我无权查看或接受您的编辑。但是你可以编辑你的问题并给出完整的答案

标签: eclipse grails groovy groovyclassloader


【解决方案1】:

如果我的理解是正确的,Grails 不会使用您的 groovy/lib 文件夹中的 jar,而是使用 Grails 安装文件夹中的 jar。你可能想试试这个:

根据here 的帖子,您应该转到已安装的 Grails 文件夹 (%GRAILS_HOME%)。在该文件夹中,找到 lib 文件夹,并指定您拥有的正确版本的 gant_groovy.jar。然后将 %GRAILS_HOME%/bin/startGrails.bat 编辑为文本并添加以下行:

( set STARTER_CLASSPATH=%GRAILS_HOME%\lib\org.codehaus.groovy\groovy-all\jars\groovy-all-1.8.0.jar;%GRAILS_HOME%\dist\grails-bootstrap-1.4.0.M1.jar;%GRAILS_HOME%\lib\org.codehaus.gant\gant_groovy1.8\jars\gant_groovy1.8-1.9.5.jar 
)

请注意,上一行的路径不是很准确(每个分布似乎都不同)。您应该在 %GRAILS_HOME% 文件夹中找到所需的 jar 并相应地更改路径。

【讨论】:

  • 注意 1:如果您在 STS 中运行,那么 STS 可能不会获取您对 startGrails 脚本或 .bat 文件所做的更改。在这种情况下,转到项目主目录,将 startGrails 脚本添加到您的路径,然后从命令行运行 startGrails。另请参阅here
  • 注意 2:如果原始问题得到解决,然后您会收到类似于...“执行脚本 CreateApp 时出错:.class 文件中的版本号错误,java.lang.UnsupportedClassVersionError: 版本错误.class 文件中的编号”,然后检查您的 Java 版本。我最初使用的是 Java 1.5。将 startGrails 链接到 Java 1.6 解决了这个问题。 Further information about the 'java.lang.UnsupportedClassVersionError: Bad version number in .class file' is here
猜你喜欢
  • 2016-12-05
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多