groovy脚本中的类定义

groovy脚本中的类定义,groovy,Groovy,是否可以在groovy脚本中创建类定义 我有一个简单的脚本示例 class HelloWorld { def name def greet() { "Hello ${name}" } } def helloWorld = new HelloWorld() helloWorld.name = "Groovy" println helloWorld.greet() 但是我得到了这样的错误 org.codehaus.groov

是否可以在groovy脚本中创建类定义

我有一个简单的脚本示例

class HelloWorld {    
    def name    

    def greet() { 
        "Hello ${name}" 
    }
}    

def helloWorld = new HelloWorld()
helloWorld.name = "Groovy"

println helloWorld.greet()
但是我得到了这样的错误

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: Class definition not expected here. Please define the class at an appropriate place or perhaps try using a block/Closure instead. at line: 1 column: 1. File: Script1.groovy @ line 1, column 1.
   class HelloWorld {    
   ^

1 error

at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:309) ~[groovy-all-2.4.3.jar:2.4.3]
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:943) ~[groovy-all-2.4.3.jar:2.4.3]
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:590) ~[groovy-all-2.4.3.jar:2.4.3]
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:566) ~[groovy-all-2.4.3.jar:2.4.3]
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:543) ~[groovy-all-2.4.3.jar:2.4.3]
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:297) ~[groovy-all-2.4.3.jar:2.4.3]
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:267) ~[groovy-all-2.4.3.jar:2.4.3]
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:692) ~[groovy-all-2.4.3.jar:2.4.3]
at groovy.lang.GroovyShell.parse(GroovyShell.java:704) ~[groovy-all-2.4.3.jar:2.4.3]
at groovy.lang.GroovyShell.parse(GroovyShell.java:740) ~[groovy-all-2.4.3.jar:2.4.3]
at groovy.lang.GroovyShell.parse(GroovyShell.java:731) ~[groovy-all-2.4.3.jar:2.4.3

这段代码运行良好。可以。

是的,通常在脚本中创建类定义是正常的

我无法重现您的错误,您也无法说明如何运行此代码。我猜您正在尝试使用Groovy脚本来配置某些产品(例如,Mule具有此功能)。您的问题似乎与您试图配置的对象有关

如果我尝试在groovysh中运行脚本,当它尝试使用
def
定义helloWorld变量时,我会得到“Unknown property”

正如所说,在groovyconsole中,它工作得很好

如果我将您的代码放入一个名为HelloWorld.groovy的文件中,并从命令行运行该文件:

groovy HelloWorld.groovy
然后我得到

C:\Users\ndh\HelloWorld.groovy:1:类HelloWorld的重复类定义无效:源C:\Users\ndh\HelloWorld.groovy至少包含两个类HelloWorld的定义。 其中一个类是使用class语句显式生成的类,另一个是基于文件名从脚本体生成的类。解决方案是更改文件名或更改类名。 @第1行第1列。 类HelloWorld{ ^

1错误

将文件名更改为notHelloWorld.groovy可以:

c:\Users\ndh>groovy notHelloWorld.groovy
Hello Groovy
但这不是您的问题,因为stacktrace显示您的文件名为Script1

在编写脚本时,我将主逻辑放在顶部,将辅助函数和类定义放在底部。不过,这正是我组织代码以提高可读性的方式。

请参见