【问题标题】:MarkupBuilder in Eclipse: unable to resolve class groovy.xml.markupBuilderEclipse 中的 MarkupBuilder:无法解析类 groovy.xml.markupBuilder
【发布时间】:2021-11-16 01:38:10
【问题描述】:

我觉得提出这个问题有点傻,但我别无选择。

基本上,我在“让我们学习 groovy”项目中有这个:

package com.mypackage.markupexercise

import groovy.xml.MarkupBuilder

println "Hello MarkupBuilder"

def writer = new StringWriter()
def builder = new MarkupBuilder(writer)

builder.records() {
    example(id:1)
}

我收到以下编译错误:

<path>\markupbuilderexercise\Main.groovy: 3: unable to resolve class groovy.xml.MarkupBuilder
 @ line 3, column 1.
   import groovy.xml.MarkupBuilder
   ^

1 error

现在,我已经看到 [this question][1],并且我已经导入了 groovy-xml-3.09.jar 文件(通过右键单击项目 -> 属性 -> Java 构建路径 -> 添加罐子.. .)

“问题”选项卡上没有任何内容,如果我尝试通过 groovy 控制台运行,则会收到以下错误:

groovy.lang.MissingMethodException: No signature of method: groovy.xml.MarkupBuilder.records() is applicable for argument types: (com.neuro.groovyhelloworld.markupbuilderexercise.Main$_run_closure1) values: [com.neuro.groovyhelloworld.markupbuilderexercise.Main$_run_closure1@2e757861]

    at com.neuro.groovyhelloworld.markupbuilderexercise.Main.run(Main.groovy:10)

    at com.neuro.groovyhelloworld.markupbuilderexercise.Main.main(Main.groovy)

我的看法是我没有以正确的方式添加依赖项,但我是一名 Java 开发人员,依赖项要么是我所做的,要么只是依赖于 Maven/Gradle,所以我有点这里没有想法。

我错过了什么?

  [1]: https://stackoverflow.com/questions/59132101/eclipse-groovy-unable-to-resolve-class

【问题讨论】:

    标签: groovy groovy-console groovy-eclipse


    【解决方案1】:

    我在选择 Run As > Groovy Console 然后运行脚本时看到了同样的问题。 Run As > Groovy Script 在以下源中运行良好——我使用了grab,所以我不需要将groovy-xml 添加到我的项目的类路径中:

    @Grab('org.codehaus.groovy:groovy-xml:3.0.9')
    import groovy.xml.MarkupBuilder
    
    def writer = new StringWriter()
    new MarkupBuilder(writer).tap {
      records {
        example(id:1)
      }
    }
    
    print writer
    

    我得到以下输出:

    <records>
      <example id='1' />
    </records>
    

    您还可以使用 Run As > Java Application 构建项目并运行脚本。

    【讨论】:

    • 嗯,这就是答案,但现在我得到的问题比以前多了,哈哈。它仅在您编写时添加“grab”注释(官方文档有一些关于 20 种不同的编写方式,但并不清楚),它似乎忽略了 eclipse 配置?这是添加依赖项的唯一方法(通过在每个需要它的文件中放置一个@grab 吗?)真是一团糟......
    • 在eclipse中有很多方法可以给项目添加依赖。如果你只是写脚本来尝试功能,那么 Grab 是最轻量级的。您可以将 jar 放在 ~/.groovy/lib 目录中并重新启动 eclipse。如果您使用 Properties -> Java Build Path -> Add Jars... 下载了 jar,则可以添加该 jar,正如您所描述的那样。或者,您可以使用 Maven、Gradle 或 Ivy 来管理项目的依赖项。
    • 我调查了为什么 Groovy 控制台不工作。似乎在 MetaClassImpl#invokeMissingMethod 中它正在检查 MarkupBuilder 是否实现了它所做的 invokeMethod(String,Object) 。但是,此检查无法解决方法,这是处理“记录”和“示例”的关键。可以将方法调用“records(){...}”重写为“delegate.invokeMethod('records',[{...}].toArray())”,证明可以在Groovy Console中工作如果该决议成功。
    • “它似乎忽略了 Eclipse 配置”——并非如此。 eclipse 项目类路径被编码到 Groovy 控制台或脚本命令行中,您可以在 Run > Run Configurations... > Groovy Console > your_script > Arguments 下查看。
    • 正如我在原帖中所写,我尝试了 Properties -> Java Build Path -> Add Jars,但没有成功。这就是为什么我写了关于忽略 Eclipse 配置的文章。与 Maven 相同。我的意思是,这就是我开始写这篇文章的原因,哈哈。我认为集成或其他方面存在问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2012-05-27
    • 2019-08-06
    • 2014-11-10
    相关资源
    最近更新 更多