groovy.lang.GrabConfig Maven / Gradle / Ivy
/*
* Copyright 2003-2013 the original author or authors.
*
* Licensed 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.
*
* An example involving databases:
*
* {@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')
*
* Another example involving XStream:
*
* {@code @Grapes}([
* {@code @Grab}('com.thoughtworks.xstream:xstream:1.3.1'),
* {@code @Grab}('xpp3:xpp3_min:1.1.4c'),
* {@code @GrabConfig}(systemClassLoader=true, initContextClassLoader=true)
* ])
* 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()
*
*
* Further information about customising grape behavior can be found on the Grape documentation page:
* http://groovy.codehaus.org/Grape.
*/
@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;
/**
* 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;
}