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

groovy.grape.Grape Maven / Gradle / Ivy

There is a newer version: 5.0.0-alpha-11
Show newest version
/*
 *  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.grape;

import java.net.URI;
import java.security.PrivilegedAction;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * Facade to GrapeEngine.
 */
public class Grape {

    public static final String AUTO_DOWNLOAD_SETTING = "autoDownload";
    public static final String DISABLE_CHECKSUMS_SETTING = "disableChecksums";
    public static final String SYSTEM_PROPERTIES_SETTING = "systemProperties";
    private static final URI[] EMPTY_URI_ARRAY = new URI[0];
    private static final Map[] EMPTY_MAP_ARRAY = new Map[0];

    private static boolean enableGrapes = Boolean.parseBoolean(System.getProperty("groovy.grape.enable", "true"));
    private static boolean enableAutoDownload = Boolean.parseBoolean(System.getProperty("groovy.grape.autoDownload", "true"));
    private static boolean disableChecksums = Boolean.parseBoolean(System.getProperty("groovy.grape.disableChecksums", "false"));
    protected static GrapeEngine instance;

    /**
     * This is a static access kill-switch.  All of the static shortcut
     * methods in this class will not work if this property is set to false.
     * By default it is set to true.
     */
    public static boolean getEnableGrapes() {
        return enableGrapes;
    }

    /**
     * This is a static access kill-switch.  All of the static shortcut
     * methods in this class will not work if this property is set to false.
     * By default it is set to true.
     */
    public static void setEnableGrapes(boolean enableGrapes) {
        Grape.enableGrapes = enableGrapes;
    }

    /**
     * This is a static access auto download enabler.  It will set the
     * 'autoDownload' value to the passed in arguments map if not already set.
     * If 'autoDownload' is set the value will not be adjusted.
     * 

* This applies to the grab and resolve calls. *

* If it is set to false, only previously downloaded grapes * will be used. This may cause failure in the grape call * if the library has not yet been downloaded *

* If it is set to true, then any jars not already downloaded will * automatically be downloaded. Also, any versions expressed as a range * will be checked for new versions and downloaded (with dependencies) * if found. *

* By default it is set to true. */ public static boolean getEnableAutoDownload() { return enableAutoDownload; } /** * This is a static access auto download enabler. It will set the * 'autoDownload' value to the passed in arguments map if not already * set. If 'autoDownload' is set the value will not be adjusted. *

* This applies to the grab and resolve calls. *

* If it is set to false, only previously downloaded grapes * will be used. This may cause failure in the grape call * if the library has not yet been downloaded. *

* If it is set to true, then any jars not already downloaded will * automatically be downloaded. Also, any versions expressed as a range * will be checked for new versions and downloaded (with dependencies) * if found. By default it is set to true. */ public static void setEnableAutoDownload(boolean enableAutoDownload) { Grape.enableAutoDownload = enableAutoDownload; } /** * Global flag to ignore checksums. * By default it is set to false. */ public static boolean getDisableChecksums() { return disableChecksums; } /** * Set global flag to ignore checksums. * By default it is set to false. */ public static void setDisableChecksums(boolean disableChecksums) { Grape.disableChecksums = disableChecksums; } public static synchronized GrapeEngine getInstance() { if (instance == null) { try { // by default use GrapeIvy // TODO: META-INF/services resolver? instance = (GrapeEngine) Class.forName("groovy.grape.GrapeIvy").getDeclaredConstructor().newInstance(); } catch (ReflectiveOperationException ignore) { } } return instance; } public static void grab(String endorsed) { if (enableGrapes) { GrapeEngine instance = getInstance(); if (instance != null) { instance.grab(endorsed); } } } public static void grab(Map dependency) { if (enableGrapes) { GrapeEngine instance = getInstance(); if (instance != null) { if (!dependency.containsKey(AUTO_DOWNLOAD_SETTING)) { dependency.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload); } if (!dependency.containsKey(DISABLE_CHECKSUMS_SETTING)) { dependency.put(DISABLE_CHECKSUMS_SETTING, disableChecksums); } instance.grab(dependency); } } } @SuppressWarnings("removal") // TODO a future Groovy version should perform the operation not as a privileged action public static void grab(final Map args, final Map... dependencies) { if (enableGrapes) { java.security.AccessController.doPrivileged(new PrivilegedAction() { @Override public Void run() { GrapeEngine instance1 = getInstance(); if (instance1 != null) { if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) { args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload); } if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) { args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums); } if (!args.containsKey(GrapeEngine.CALLEE_DEPTH)) { args.put(GrapeEngine.CALLEE_DEPTH, GrapeEngine.DEFAULT_CALLEE_DEPTH + 2); } instance1.grab(args, dependencies); } return null; } }); } } public static Map>> enumerateGrapes() { Map>> grapes = null; if (enableGrapes) { GrapeEngine instance = getInstance(); if (instance != null) { grapes = instance.enumerateGrapes(); } } if (grapes == null) { return Collections.emptyMap(); } return grapes; } public static URI[] resolve(Map args, Map... dependencies) { return resolve(args, null, dependencies); } public static URI[] resolve(Map args, List depsInfo, Map... dependencies) { URI[] uris = null; if (enableGrapes) { GrapeEngine instance = getInstance(); if (instance != null) { if (!args.containsKey(AUTO_DOWNLOAD_SETTING)) { args.put(AUTO_DOWNLOAD_SETTING, enableAutoDownload); } if (!args.containsKey(DISABLE_CHECKSUMS_SETTING)) { args.put(DISABLE_CHECKSUMS_SETTING, disableChecksums); } uris = instance.resolve(args, depsInfo, dependencies); } } if (uris == null) { return EMPTY_URI_ARRAY; } return uris; } public static Map[] listDependencies(ClassLoader cl) { Map[] maps = null; if (enableGrapes) { GrapeEngine instance = getInstance(); if (instance != null) { maps = instance.listDependencies(cl); } } if (maps == null) { return EMPTY_MAP_ARRAY; } return maps; } public static void addResolver(Map args) { if (enableGrapes) { GrapeEngine instance = getInstance(); if (instance != null) { instance.addResolver(args); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy