web-dev-qa-db-fra.com

Comment le référentiel du plugin Gradle peut-il être modifié?

Je travaille dans une grande entreprise avec une politique stricte interdisant l’utilisation non filtrée de bibliothèques extérieures. Nous devons tout tirer des référentiels des sociétés bienheureuses, et non pas de l'internet nu, y compris gradle.org. 

En utilisant la syntaxe originale du plugin apply de gradle, en conjonction avec un bloc buildscript, je peux ajouter des plugins (bénis) à notre référentiel et les utiliser dans des builds. En d'autres termes:

buildscript {
    repositories {
        maven { url "https://privaterepo.myemployer.com" }
    }

    dependencies {
        // various dependencies
        classpath "org.something:some-plugin:1.0"
        ...
    }

apply plugin: "someplugin"

Au lieu de cela, je veux pouvoir utiliser les nouveaux plugins DSL, c.-à-d.

plugins {
    id 'org.something.some-plugin' version '1.0'
}

(Je me rends compte que l'url du dépôt privé aurait besoin d'être défini quelque part)

La nouvelle syntaxe du plugin va toujours à gradle.org et ne semble pas avoir le moyen de fournir une autre URL de téléchargement. Est-ce que quelqu'un connaît un moyen?

J'ai examiné la documentation et l'Internet et je ne trouve pas de réponse. Toutes mes excuses si la réponse est complètement évidente.

Merci beaucoup!

18
Tony Pierce

Gradé 3.5 et (vraisemblablement) plus tard

Gradle 3.5 possède une nouvelle fonctionnalité ( incubating ), permettant un contrôle plus précis de la résolution de dépendance des plugins, à l’aide de pluginManagement DSL

Les règles de résolution de plug-in vous permettent de modifier les requêtes de plug-in effectuées dans plugins {} blocs, par exemple changer la version demandée ou explicitement spécifier les coordonnées de l'artefact d'implémentation.

Pour ajouter des règles de résolution, utilisez le resolutionStrategy {} à l'intérieur du fichier pluginManagement {} bloc:

Exemple 27.6. Stratégie de résolution des plugins.

settings.gradle
pluginManagement {
  resolutionStrategy {
      eachPlugin {
          if (requested.id.namespace == 'org.gradle.sample') {
              useModule('org.gradle.sample:sample-plugins:1.0.0')
          }
      }
  }
  repositories {
      maven {
        url 'maven-repo'
      }
      gradlePluginPortal()
      ivy {
        url 'ivy-repo'
      }
  }
}

Cela indique à Gradle d'utiliser l'artefact d'implémentation de plug-in spécifié au lieu d'utiliser le mappage par défaut intégré du plug-in ID vers Coordonnées Maven/Ivy.

Le bloc pluginManagement {} ne peut apparaître que dans settings.gradle fichier, et doit être le premier bloc du fichier. Custom Maven et Ivy les référentiels de plugins doivent contenir en plus des artefacts de marqueurs de plugins aux artefacts qui implémentent réellement le plugin.

Le bloc repositories à l'intérieur de pluginManagement fonctionne de la même manière que le bloc pluginRepositories des versions précédentes.


Avant le grade 3.5

Avant Gradle 3.5, vous deviez définir le bloc pluginRepositories dans votre settings.gradle, comme expliqué dans la réponse de sytolk:

Le bloc pluginRepositories {} ne peut apparaître que dans le fichier settings.gradle fichier, et doit être le premier bloc du fichier.

pluginRepositories {
  maven {
    url 'maven-repo'
  }
  gradlePluginPortal()
  ivy {
    url 'ivy-repo'
  }
}
13
willyjoker

La syntaxe du plugin a un peu changé depuis la dernière version de Gradle et la syntaxe correcte pour Gradle 4.x est la suivante:

pluginManagement {
  repositories {
      maven {
        url 'maven-repo'
      }
      gradlePluginPortal()
      ivy {
        url 'ivy-repo'
      }
  }
}

Ainsi, par exemple, settings.gradle utiliserait votre miroir Nexus interne:

pluginManagement {
  repositories {
    maven {
      url 'https://internal.repo.corporate/repository/gradle-proxy/'
    }
  }
}

rootProject.name = 'My Project Name'

Plus d'informations peuvent être trouvées dans la documentation du plugin Gradle .

2
Erik Pragt

Pour appliquer le paramètre globalement, vous pouvez ajouter à USER_HOME/.gradle/init.gradle comme suit:

allprojects {       
    repositories {
        mavenLocal()
        maven { url "https://artifactory.mycompany.com/artifactory/maven-repo" }
    }       
}   

settingsEvaluated { settings ->
    settings.pluginManagement {
        repositories {
            mavenLocal()
            maven { url "https://artifactory.mycompany.com/artifactory/maven-repo" }
        }
    }
}
2
Ali Cheaito

Il faut définir pluginRepositories dans les paramètres Gradle

https://docs.gradle.org/current/userguide/plugins.html#sec:custom_plugin_repositories

Le bloc pluginRepositories {} ne peut apparaître que dans le fichier settings.gradle et doit être le premier bloc du fichier.

pluginRepositories {
  maven {
    url 'maven-repo'
  }
  gradlePluginPortal()
  ivy {
    url 'ivy-repo'
  }
}
1
sytolk