• Gradle中的buildScript代码块


    PS: 在build script中的task

    apply plugin: 'spring-boot' 需要 classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.3.RELEASE")

    apply plugin: 'com.moowork.gulp' 需要classpath 'com.moowork.gradle:gradle-gulp-plugin:0.10'

    在编写Gradle脚本的时候,在build.gradle文件中经常看到这样的代码:

    build.gradle

    1. buildScript {
    2. repositories {
    3. mavenCentral()
    4. }
    5. }
    6. repositories {
    7. mavenCentral()
    8. }

    这样子很容易让人奇怪,为什么repositories要声明两次哪?buildscript代码块中的声明与下半部分声明有什么不同?

    其实答案非常简单。buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等。

    而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。

    gradle是由groovy语言编写的,支持groovy语法,可以灵活的使用已有的各种ant插件、基于jvm的类库,

    这也是它比maven、 ant等构建脚本强大的原因。虽然gradle支持开箱即用,但是如果你想在脚本中使用一些第三方的插件、类库等,

    就需要自己手动添加对这些插件、类库的 引用。而这些插件、类库又不是直接服务于项目的,而是支持其它build脚本的运行。

    所以你应当将这部分的引用放置在buildscript代码块中。 gradle在执行脚本时,会优先执行buildscript代码块中的内容,

    然后才会执行剩余的build脚本。

    举个例子,假设我们要编写一个task,用于解析csv文件并输出其内容。虽然我们可以使用gradle编写解析csv文件的代码,

    但其实 apache有个库已经实现了一个解析csv文件的库供我们直接使用。我们如果想要使用这个库,

    需要在gradle.build文件中加入对该库的引用。

    build.gradle

    1. buildscript {
    2. repositories {
    3. mavenLocal()
    4. mavenCentral()
    5. }
    6. dependencies {
    7. classpath 'org.apache.commons:commons-csv:1.0'
    8. }
    9. }
    10. import org.apache.commons.csv.*
    11. task printCSV() {
    12. doLast {
    13. def records = CSVFormat.EXCEL.parse(new FileReader('config/sample.csv'))
    14. for (item in records) {
    15. print item.get(0) + ' '
    16. println item.get(1)
    17. }
    18. }
    19. }

    buildscript代码块中的repositories和dependencies的使用方式与直接在build.gradle文件中的使用方 式几乎完全一样。

    唯一不同之处是在buildscript代码块中你可以对dependencies使用classpath声明。该classpath声 明说明了在执行其余的build脚本时,

    class loader可以使用这些你提供的依赖项。这也正是我们使用buildscript代码块的目的。

    而如果你的项目中需要使用该类库的话,就需要定义在buildscript代码块之外的dependencies代码块中。

    所以有可能会看到在build.gradle中出现以下代码:

    build.gradle

    1. repositories {
    2. mavenLocal()
    3. mavenCentral()
    4. }
    5. dependencies {
    6. compile 'org.springframework.ws:spring-ws-core:2.2.0.RELEASE',
    7. 'org.apache.commons:commons-csv:1.0'
    8. }
    9. buildscript {
    10. repositories {
    11. mavenLocal()
    12. mavenCentral()
    13. }
    14. dependencies {
    15. classpath 'org.apache.commons:commons-csv:1.0'
    16. }
    17. }
    18. import org.apache.commons.csv.*
    19. task printCSV() {
    20. doLast {
    21. def records = CSVFormat.EXCEL.parse(new FileReader('config/sample.csv'))
    22. for (item in records) {
    23. print item.get(0) + ' '
    24. println item.get(1)
    25. }
    26. }
    27. }
  • 相关阅读:
    爬虫机试题-爬取新闻网站
    [单片机框架][drivers层][ADC] fuelgauge 软件电量计(二)
    IPIDEA代理IP如何帮助企业采集市场信息
    Linux内存管理(二十):LRU简介
    Spring5 框架-尚硅谷
    反射第一部分,获取Class对象,获取Constructor对象
    【SQL数据分析 | 手把手教你做淘宝用户分析!】
    TikTok剪辑系统升级:照片模式增加文案字数,达人合作平台更新
    集成学习家族总结
    别再吐槽大学教材了,来看看这些网友强推的数学神作!
  • 原文地址:https://blog.csdn.net/xiaopangcame/article/details/133955312