The scope of a script variable changes once we add a type definition to the variable. Then the variable is no longer visible in methods of the script. To make a type variable visible in the entire script scope we add the annotation @Field
. This way the variable has a type and can be used in methods of the script.
import groovy.transform.Field String stringValue = 'I am typed without @Field.' def i = 42 @Field String stringField = 'I am typed with @Field.' counter = 0 // No explicit type definition. def runIt() { try { assert stringValue == 'I am typed without @Field.' } catch (e) { assert e instanceof MissingPropertyException } try { assert i == 42 } catch (e) { assert e instanceof MissingPropertyException } assert stringField == 'I am typed with @Field.' assert counter++ == 0 } runIt() assert stringValue == 'I am typed without @Field.' assert stringField == 'I am typed with @Field.' assert i == 42 assert counter == 1