如何从build.gradle中提取buildscript

时间:2018-06-27 14:04:05

标签: java gradle

在build.gradle中有以下buildscript部分:

buildscript {
    ext {
        nexusUrl = project.hasProperty("myNexusUrl") ? myNexusUrl : "http://10.199.0.99:8081/repository/maven-public/"
    }
    repositories {
        maven { url nexusUrl }
    }
    dependencies {
        classpath group: 'mygroup', name: 'MyGradleLibrary', version: '1.0.1'
    }
}

如何将这段代码提取到外部文件中,以免破坏构建?

1 个答案:

答案 0 :(得分:0)

从您的媒体库中创建一个插件,然后将其发布到该Nexus。然后,在您的settings.gradle中添加以下行:

pluginManagement {
    repositories {
        maven {
            url "…"
        }
        gradlePluginPortal()
    }

    resolutionStrategy {
        eachPlugin {
            if (requested.id.namespace == 'mygroup.gradle-library') {
                useModule('mygroup.gradle-library:1.0.1')
            }
        }
    }
}

在这里您声明要用mygroup.gradle-library依赖项替换mygroup.gradle-library:1.0.1插件。

然后在您的build.gradle中添加一个插件:

plugins {
    id 'mygroup.gradle-library'
}

现在,您可以在没有buildscript块的情况下依赖于构建类路径。


编辑

为了将其应用于您的项目所有,请将这些行放在init script ~/.gradle/init.gradle$GRADLE_USER_HOME/init.gradle)中:

settingsEvaluated {
    pluginManagement {
        repositories {
            maven {
                url "…"
            }
            gradlePluginPortal()
        }

        resolutionStrategy {
            eachPlugin {
                if (requested.id.namespace == 'mygroup.gradle-library') {
                    useModule('mygroup.gradle-library:1.0.1')
                }
            }
        }
    }
}

之后,plugin块应该可以工作了。但是,除非他们也这样做,否则它仅对您有效,对您的队友无效。

如果您不喜欢plugins,您仍然可以通过示例脚本来执行“全局”配置。 Read more关于可用的API。