All Downloads are FREE. Search and download functionalities are using the official Maven repository.

groovy.lang.GrabConfig Maven / Gradle / Ivy

There is a newer version: 3.9
Show newest version
/*
 * 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; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy