groovy.lang.Grapes Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of groovy Show documentation
Show all versions of groovy Show documentation
Groovy: A powerful, dynamic language for the JVM
/*
* 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;
/**
* Sometimes we will need more than one grab per class, but we can only add
* one annotation type per annotatable node. This class allows for multiple
* grabs to be added.
*
* For example:
*
*
* {@code @Grapes([@Grab(module='m1'), @Grab(module='m2')])}
* class AnnotatedClass { ... }
*
*
* You can override an implicit transitive dependency by providing an explicit one.
* E.g. htmlunit 2.6 normally uses xerces 2.9.1 but you can get 2.9.0 as follows:
*
* {@code @Grapes}([
* {@code @Grab}('net.sourceforge.htmlunit:htmlunit:2.6'),
* {@code @Grab}('xerces#xercesImpl;2.9.0')
* ])
*
* Obviously, only do this if you understand the consequences.
*
* You can also remove transitive dependencies altogether (provided you
* know you don't need them) using {@code @GrabExclude}.
* For example, here is how we would not grab the {@code logkit} and
* {@code avalon-framework} transitive dependencies for Apache POI:
*
* {@code @Grapes}([
* {@code @Grab}("org.apache.poi#poi;3.5-beta6"),
* {@code @GrabExclude}("logkit:logkit"),
* {@code @GrabExclude}("avalon-framework#avalon-framework")
* ])
* import org.apache.poi.hssf.util.CellReference
* assert new CellReference(0, 0, false, false).formatAsString() == 'A1'
* assert new CellReference(1, 3).formatAsString() == '$D$2'
*
* It is also sometimes also useful to use {@code @GrabConfig} to further adjust how dependencies
* are grabbed. See {@code @GrabConfig} for further information.
*/
public @interface Grapes {
Grab[] value();
/**
* This will be pushed into the child grab annotations if the value is not
* set in the child annotation already.
*
* This results in an effective change in the default value, which each @Grab
* can still override
*/
boolean initClass() default true;
}