自定义Gradle插件为Project添加依赖

在Gradle的源码注释文档关于依赖项中提到:

 * Dependencies
 *
 * A project generally has a number of dependencies it needs in order to do its work.  Also, a project generally
 * produces a number of artifacts, which other projects can use. Those dependencies are grouped in configurations, and
 * can be retrieved and uploaded from repositories. You use the {@link org.gradle.api.artifacts.ConfigurationContainer}
 * returned by {@link #getConfigurations()} method to manage the configurations. The {@link
 * org.gradle.api.artifacts.dsl.DependencyHandler} returned by {@link #getDependencies()} method to manage the
 * dependencies. The {@link org.gradle.api.artifacts.dsl.ArtifactHandler} returned by {@link #getArtifacts()} method to
 * manage the artifacts. The {@link org.gradle.api.artifacts.dsl.RepositoryHandler} returned by {@link
 * #getRepositories()} method to manage the repositories.

也就是说一个Project中所有的依赖项都是通过Configuration分组最终保存在Configuration的dependencies里面,如果你想知道都有哪些Configuration可以在build.gradle文件中加入

project.configurations.all { configuration ->
                System.out.println("this configuration is ${configuration.name}")
            }

然后在Gradle Console中可以看到所有的Configuration

this configuration is androidJacocoAgent
this configuration is androidJacocoAnt
this configuration is androidTestAnnotationProcessor
this configuration is androidTestApi
this configuration is androidTestApk
this configuration is androidTestCompile
this configuration is androidTestCompileOnly
...
this configuration is api
...
this configuration is implementation
...

其中的apiimplementation是不是很眼熟?这些Configuration其实就是对应于你在build.gradle文件中的

dependencies {
    implementation 'group:name:version'
    ...
}

了解了这些后我们就可以知道怎么在我们自定义的插件中为Project加入依赖项了:

class TestPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {

        project.configurations.all { configuration ->
            def name = configuration.name
            System.out.println("this configuration is ${name}")
            if (name != "implementation" && name != "compile") {
                return
            }
            //为Project加入Gson依赖
            configuration.dependencies.add(project.dependencies.create("com.google.code.gson:gson:2.8.2"))
        }
    }
}
    原文作者:WuRichard
    原文地址: https://www.jianshu.com/p/440d7c6cf172
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞