/* * 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) * 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; }