如何更改gradle插件存储库?

时间:2016-05-17 20:11:35

标签: gradle build gradle-plugin

我在一家大公司工作,严格的政策禁止未经过滤的外部图书馆使用。我们必须从有福的公司存储库中提取所有内容,而不是包括gradle.org在内的裸网络。

使用gradle的原始apply plugin语法,结合buildscript块,我可以添加(祝福)插件到我们的repo并在构建中使用它们。换句话说:

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

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

apply plugin: "someplugin"

相反,我希望能够使用新插件DSL,即

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

(我意识到私人仓库网址需要在某处定义)

新的插件语法总是发送到gradle.org,并且似乎没有任何方法可以提供备用下载URL。有谁知道一种方式?

我仔细检查了文档和互联网,但找不到答案。如果答案完全明显,请道歉。

非常感谢!

4 个答案:

答案 0 :(得分:15)

Gradle 3.5和(推测)稍后

Gradle 3.5有一个新的(incubating)功能,可以更好地控制插件依赖性解析,using the pluginManagement DSL

  

插件解析规则允许您修改插件请求   plugins {}块,例如更改请求的版本或明确   指定实现工件坐标。

     

要添加解决方案规则,请使用内部的resolutionStrategy {}   pluginManagement {}阻止:

     

例27.6。插件解析策略。

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'
      }
  }
}
     

这告诉Gradle使用指定的插件实现工件   而不是使用从插件ID到内置的默认映射   Maven / Ivy坐标。

     

pluginManagement {}块只能出现在 settings.gradle 中   文件,并且必须是文件中的第一个块。定制Maven和常春藤   插件存储库必须另外包含插件标记工件   实际实现插件的工件。

repositories中的pluginManagement块与先前版本中的pluginRepositories块的工作方式相同。

在Gradle 3.5之前

在Gradle 3.5之前,您必须在 settings.gradle define the pluginRepositories block,如sytolk的回答中所述:

  

pluginRepositories {}块可能只出现在settings.gradle中   文件,并且必须是文件中的第一个块。

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

答案 1 :(得分:2)

自最新版本的Gradle以来,插件语法已经发生了一些变化,并且Gradle 4.x的正确语法现在为:

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

例如,此 settings.gradle 将使用您的内部Nexus镜像:

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

rootProject.name = 'My Project Name'

更多信息可以在the Gradle plugin documentation中找到。

答案 2 :(得分:2)

要全局应用设置,可以如下设置added to USER_HOME/.gradle/init.gradle

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" }
        }
    }
}

答案 3 :(得分:1)

需要在Gradle设置中定义pluginRepositories

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

pluginRepositories {}块可能只会出现在 settings.gradle 文件中,并且必须文件中的第一个块

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