初始化脚本

⟁ 365彩票app老版 ⏳ 2026-01-28 13:41:13 👤 admin 👁️ 2611 ❤️ 59
初始化脚本

插件可以像 Gradle 构建脚本或 Gradle 设置文件一样应用于 init 脚本。

在 init 脚本中使用插件

init.gradle.kts

apply()

class EnterpriseRepositoryPlugin : Plugin {

companion object {

const val ENTERPRISE_REPOSITORY_URL = "https://repo.gradle.org/gradle/repo"

}

override fun apply(gradle: Gradle) {

// ONLY USE ENTERPRISE REPO FOR DEPENDENCIES

gradle.allprojects {

repositories {

// Remove all repositories not pointing to the enterprise repository url

all {

if (this !is MavenArtifactRepository || url.toString() != ENTERPRISE_REPOSITORY_URL) {

project.logger.lifecycle("Repository ${(this as? MavenArtifactRepository)?.url ?: name} removed. Only $ENTERPRISE_REPOSITORY_URL is allowed")

remove(this)

}

}

// add the enterprise repository

add(maven {

name = "STANDARD_ENTERPRISE_REPO"

url = uri(ENTERPRISE_REPOSITORY_URL)

})

}

}

}

}

build.gradle.kts

repositories{

mavenCentral()

}

data class RepositoryData(val name: String, val url: URI)

tasks.register("showRepositories") {

val repositoryData = repositories.withType().map { RepositoryData(it.name, it.url) }

doLast {

repositoryData.forEach {

println("repository: ${it.name} ('${it.url}')")

}

}

}

init.gradle

apply plugin: EnterpriseRepositoryPlugin

class EnterpriseRepositoryPlugin implements Plugin {

private static String ENTERPRISE_REPOSITORY_URL = "https://repo.gradle.org/gradle/repo"

void apply(Gradle gradle) {

// ONLY USE ENTERPRISE REPO FOR DEPENDENCIES

gradle.allprojects { project ->

project.repositories {

// Remove all repositories not pointing to the enterprise repository url

all { ArtifactRepository repo ->

if (!(repo instanceof MavenArtifactRepository) ||

repo.url.toString() != ENTERPRISE_REPOSITORY_URL) {

project.logger.lifecycle "Repository ${repo.url} removed. Only $ENTERPRISE_REPOSITORY_URL is allowed"

remove repo

}

}

// add the enterprise repository

maven {

name = "STANDARD_ENTERPRISE_REPO"

url = ENTERPRISE_REPOSITORY_URL

}

}

}

}

}

build.gradle

repositories{

mavenCentral()

}

@Immutable

class RepositoryData {

String name

URI url

}

tasks.register('showRepositories') {

def repositoryData = repositories.collect { new RepositoryData(it.name, it.url) }

doLast {

repositoryData.each {

println "repository: ${it.name} ('${it.url}')"

}

}

}

> gradle --init-script init.gradle.kts -q showRepositories

repository: STANDARD_ENTERPRISE_REPO ('https://repo.gradle.org/gradle/repo')

> gradle --init-script init.gradle -q showRepositories

repository: STANDARD_ENTERPRISE_REPO ('https://repo.gradle.org/gradle/repo')

init 脚本中的插件确保在运行构建时只使用指定的仓库。

在 init 脚本中应用插件时,Gradle 会实例化插件并调用插件实例的 Plugin.apply(T) 方法。

gradle 对象作为参数传递,可用于配置构建的所有方面。当然,应用插件可以作为外部依赖项解析,如init 脚本的外部依赖项中所述

相关推荐