Groovy Documentation

## groovy.lang
[Java] Annotation Type Grab

    java.lang.Object
      groovy.lang.Grab

    @Retention(RetentionPolicy.SOURCE)
    @Target({
            ElementType.CONSTRUCTOR,
            ElementType.FIELD,
            ElementType.LOCAL_VARIABLE,
            ElementType.METHOD,
            ElementType.PARAMETER,
            ElementType.TYPE})
    public @interface Grab

Used to grab the referenced artifact and its dependencies and make it available on the Classpath.

Some examples:

     @Grab(group='commons-lang', module='commons-lang', version='2.4')
     import org.apache.commons.lang.WordUtils
     println "Hello ${WordUtils.capitalize('world')}"

Or using the compact Gradle-inspired syntax:

     @Grab('commons-lang:commons-lang:2.4')
     import org.apache.commons.lang.WordUtils
     println "Hello ${WordUtils.capitalize('world')}"

or the same thing again using the Ivy-inspired syntax variant:

     @Grab('commons-lang#commons-lang;2.4')
     import org.apache.commons.lang.WordUtils
     println "Hello ${WordUtils.capitalize('world')}"

Further information such as where artifacts are downloaded to, how to add additional resolvers, how to customise artifact resolution etc., can be found on the Grape documentation page: http://groovy.codehaus.org/Grape.

Required Element Summary
`java.lang.String` | `module` The module or artifact, e.g.: "ant-junit"
`java.lang.String` | `version` The revision or version, e.g.: "1.7.1"

Optional Element Summary
`boolean` | `changing` Defaults to `false` but set to `true` if the dependency artifacts may change without a corresponding revision change.
`java.lang.String` | `classifier` The classifier if in use, e.g.: "jdk14" @default ""
`java.lang.String` | `conf` The configuration if in use (normally only used by internal ivy repositories).
`java.lang.String` | `ext` The extension of the artifact (normally safe to leave at default value of "jar" but other values like "zip" are sometimes useful).
`boolean` | `force` Defaults to `false` but set to `true` to indicate to the underlying Ivy conflict manager that this dependency should be forced to the given revision.
`java.lang.String` | `group` The organisation or group, e.g.: "org.apache.ant" @default ""
`boolean` | `initClass` By default, when a `@Grab` annotation is used, the `grab()` call is added to the static initializers of the class the annotatable node appears in.
`boolean` | `transitive` Defaults to `true` but set to `false` if you don't want transitive dependencies also to be downloaded.
`java.lang.String` | `type` The type of the artifact (normally safe to leave at default value of "jar" but other values like "sources" and "javadoc" are sometimes useful).
`java.lang.String` | `value` Allows a more compact convenience form in one of two formats with optional appended attributes.

Method Summary

Methods inherited from class java.lang.Object
java.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()

Element Detail

### changing

    public boolean changing

  Defaults to `false` but set to `true` if the dependency artifacts may change without a corresponding revision change. Not normally recommended but may be useful for certain kinds of snapshot artifacts. May reduce the amount of underlying Ivy caching. Proper behavior may be dependent on the resolver in use. @default false

### classifier

    public java.lang.String classifier

  The classifier if in use, e.g.: "jdk14" @default ""

### conf

    public java.lang.String conf

  The configuration if in use (normally only used by internal ivy repositories). One or more comma separated values with or without square brackets, e.g. for hibernate you might have "default,proxool,oscache" or "[default,dbcp,swarmcache]". This last hibernate example assumes you have set up such configurations in your local Ivy repo and have changed your grape config (using grapeConfig.xml) or the `@GrabConfig` annotation to point to that repo. @default ""

### ext

    public java.lang.String ext

  The extension of the artifact (normally safe to leave at default value of "jar" but other values like "zip" are sometimes useful). @default ""

### force

    public boolean force

  Defaults to `false` but set to `true` to indicate to the underlying Ivy conflict manager that this dependency should be forced to the given revision. Otherwise, depending on the conflict manager in play, a later compatible version might be used instead. @default false

### group

    public java.lang.String group

  The organisation or group, e.g.: "org.apache.ant" @default ""

### initClass

    public boolean initClass

  By default, when a `@Grab` annotation is used, the `grab()` call is added to the static initializers of the class the annotatable node appears in. If you wish to disable this, add `initClass=false` to the annotation. @default true

### module

    public java.lang.String module

  The module or artifact, e.g.: "ant-junit"

### transitive

    public boolean transitive

  Defaults to `true` but set to `false` if you don't want transitive dependencies also to be downloaded. You may then need additional `@Grab` statements for any required dependencies. @default true

### type

    public java.lang.String type

  The type of the artifact (normally safe to leave at default value of "jar" but other values like "sources" and "javadoc" are sometimes useful). But see also the "classifier" attribute which is also sometimes used for "sources" and "javadoc". @default ""

### value

    public java.lang.String value

  Allows a more compact convenience form in one of two formats with optional appended attributes.

  You can choose either format but not mix-n-match:
  `group:module:version:classifier@ext` (where only group and module are required)
  `group#module;version[confs]` (where only group and module are required and confs, if used, is one or more comma separated configuration names)
  In addition, you can add any valid Ivy attributes at the end of your string value using semi-colon separated name = value pairs, e.g.:
  `@Grab('junit:junit:*;transitive=false')`
  `@Grab('group=junit;module=junit;version=4.8.2;classifier=javadoc')`
  @default ""

### version

    public java.lang.String version

  The revision or version, e.g.: "1.7.1"

Groovy Documentation