blob: 015dd964a0b70e5bc33b0a7fb8df1a300e1173e6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package groovy.lang;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Used to modify the grape configuration for grab requests.
* <p>
* An example involving databases:
* <pre>
* {@code @Grab}('mysql:mysql-connector-java:5.1.6')
* {@code @GrabConfig}(systemClassLoader=true)
* import groovy.sql.Sql
*
* def sql=Sql.newInstance("jdbc:mysql://localhost/test", "user", "password", "com.mysql.jdbc.Driver")
* println sql.firstRow('SELECT * FROM INFORMATION_SCHEMA.COLUMNS')
* </pre>
* Another example involving XStream:
* <pre>
* {@code @Grab}('com.thoughtworks.xstream:xstream:1.4.9')
* {@code @Grab}('xpp3:xpp3_min:1.1.4c')
* {@code @GrabConfig}(systemClassLoader=true, initContextClassLoader=true)
* {@code
* import com.thoughtworks.xstream.*
*
* class Staff {
* String firstname, lastname, position
* }
*
* def xstream = new XStream()
* def john1 = new Staff(firstname:'John',
* lastname:'Connor',
* position:'Resistance Leader')
*
* // write out to XML file
* new File("john.xml").withOutputStream { out ->
* xstream.toXML(john1, out)
* }
*
* // now read back in
* def john2
* new File("john.xml").withInputStream { ins ->
* john2 = xstream.fromXML(ins)
* }
*
* println john2.dump()
* }
* </pre>
* <p>
* Further information about customising grape behavior can be found on the Grape documentation page:
* <a href="http://groovy-lang.org/grape.html">http://groovy-lang.org/grape.html</a>.
*/
@Retention(RetentionPolicy.SOURCE)
@Target({
ElementType.CONSTRUCTOR,
ElementType.FIELD,
ElementType.LOCAL_VARIABLE,
ElementType.METHOD,
ElementType.PARAMETER,
ElementType.TYPE})
public @interface GrabConfig {
/**
* Set to true if you want to use the system classloader when loading the grape.
* This is normally only required when a core Java class needs to reference the grabbed
* classes, e.g. for a database driver accessed using DriverManager.
*/
boolean systemClassLoader() default false;
/**
* Define any system properties which must be set before invoking the grab - useful for
* declaring SSL certificates or proxy settings. Currently, this only affects the generated
* class or script. You may need to also set those same properties for the Groovy compiler.
* For convenience, a String with comma separated name=value pairs
* can be used in addition to an array (using Groovy's literal list notation) of String name=value items.
* The single String shorthand form can't be used if value part of a property contains a comma.
*
* @since 2.4.5
*/
String[] systemProperties() default "";
/**
* Set to true if you want the context classloader to be initialised to the classloader
* of the current class or script. This is useful for libraries or frameworks that assume
* that the context classloader has been set. But be careful when using this flag as your
* script or class might behave differently when called directly (from the command line or
* from an IDE) versus when called from within a container, e.g. a web container or a JEE container.
*/
boolean initContextClassLoader() default false;
/**
* Set to false if you want to disable automatic downloading of locally missing jars.
*/
boolean autoDownload() default true;
/**
* Set to true if you want to disable checksum checking.
*/
boolean disableChecksums() default false;
}