protected void downloadPlugin(final PluginCoordinates coordinates, final IAsyncResultHandler<File> handler) {
        if (pluginRepositories.isEmpty()) {
            // Didn't find it - no repositories configured!
            handler.handle(AsyncResultImpl.create((File) null));
            return;
        }

        final Iterator<URI> iterator = pluginRepositories.iterator();
        URI repoUrl = iterator.next();
        final IAsyncResultHandler<File> handler2 = new IAsyncResultHandler<File>() {
            @Override
            public void handle(IAsyncResult<File> result) {
                // If result is bad : No success or result empty And other repo exist
                if ((!result.isSuccess() || result.getResult() == null) && iterator.hasNext()) {
                    downloadFromMavenRepo(coordinates, iterator.next(), this);
                } else {
                    //If result is Good or all repo tried
                    handler.handle(result);
                }
            }
        };
        downloadFromMavenRepo(coordinates, repoUrl, handler2);
    }
Downloads the plugin via its maven GAV information.  This will first look in the local
.m2 directory.  If the plugin is not found there, then it will try to download the
plugin from one of the configured remote maven repositories.
gateway/engine/core/src/main/java/io/apiman/gateway/engine/impl/DefaultPluginRegistry.java