首页 文章

如何/何时生成Gradle包装器文件?

提问于
浏览
180

我试图了解Gradle Wrapper的工作原理 . 在许多源代码库中,我看到以下结构:

projectRoot/
    src/
    build.gradle
    gradle.properties
    settings.gradle
    gradlew
    gradlew.bat
    gradle/
        wrapper/
            gradle-wrapper.jar
            gradle-wrapper.properties

我的问题:

  • 如何/何时生成 gradlew / gradlew.bat ?您是否应该在项目首次创建时仅生成一次,每次提交/推送更改时是否生成它们?它们是如何产生的?

  • 上面的问题相同,但对于 gradle/wrapper/* 文件( gradle-wrapper.jargradle-wrapper.properties )?

  • 有时我在项目的 gradle 目录中看到其他 *.gradle 文件 . 这些额外的Gradle文件是什么?它们代表什么/做什么?自定义插件?

  • 进入 settings.gradlegradle.properties 中应该定义的属性有什么区别?

6 回答

  • 15
    • 你生成它一次,当你'd like to change the version of Gradle you use in the project. There'不需要经常生成时 . Here是文档 . 只需将 wrapper 任务添加到 build.gradle 文件并运行此任务即可获取包装器结构 .

    请注意,您需要 Gradle installed 来生成包装器 . 管理g生态系统工件的好工具是SDKMAN! . 要生成gradle包装器,请将以下代码添加到 build.gradle 文件中:

    task wrapper(type: Wrapper) {
       gradleVersion = '2.0' //version required
    }
    

    并运行:

    gradle wrapper
    

    任务 . 将生成的文件添加到SCM(例如git),从现在开始,所有开发人员在使用Gradle Wrapper时都将拥有相同版本的Gradle .

    使用Gradle 2.4 (或更高版本),您可以设置包装器而无需添加专用任务:

    gradle wrapper --gradle-version 2.3
    

    要么

    gradle wrapper --gradle-distribution-url https://myEnterpriseRepository:7070/gradle/distributions/gradle-2.3-bin.zip
    

    所有细节都可以找到here

    从Gradle 3.1 --distribution-type 选项也可以使用 . 选项是binary和all和bin . 所有附加包含源代码和文档 . 使用IDE时,一切都更好,因此编辑器工作得更好 . 缺点是构建可能会持续更长时间(需要下载更多数据,在CI服务器上无意义)并且需要更多空间 .

    • 这些是Gradle Wrapper文件 . 您需要生成一次(对于特定版本)并添加到版本控制 . 如果需要更改Gradle Wrapper的版本,请更改 build.gradle 中的版本,请参阅(1.)并重新生成文件 .

    • 举一个详细的例子 . 这样的文件可能有多种用途:多模块项目,责任分离,略微修改的脚本等 .

    • settings.gradle 负责项目的结构(模块,名称等),而 gradle.properties 用于项目's and Gradle'的外部细节(版本,命令行参数 -XX ,属性等)

  • 25

    生成Gradle Wrapper

    项目构建gradle

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    
    // Running 'gradle wrapper' will generate gradlew - Getting gradle wrapper working and using it will save you a lot of pain.
    task wrapper(type: Wrapper) {
        gradleVersion = '2.2' 
    }
    
    // Look Google doesn't use Maven Central, they use jcenter now.
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.0.1'
    
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    
    allprojects {
        repositories {
            jcenter()
        }
    }
    

    然后在命令行运行

    gradle wrapper
    

    如果您在系统上缺少gradle安装它或上述将无法正常工作 . 在Mac上,最好通过Homebrew安装 .

    brew install gradle
    

    成功运行包装器任务并生成 gradlew 后,请勿使用系统gradle . 它会为你节省很多麻烦 .

    ./gradlew assemble
    

    上面看到的gradle插件怎么样?

    com.android.tools.build:gradle:1.0.1
    

    您应该将版本设置为最新版本,然后您可以check the tools page并相应地编辑版本 .

    了解Android Studio生成的内容

    添加gradle和最新的Android Studio大大改变了项目布局 . 如果您有一个较旧的项目,我强烈建议您使用最新的Android Studio创建一个干净的项目,并查看Google认为标准项目的内容 .

    Android Studio具有导入旧项目的功能,这些功能也可以提供帮助 .

  • 1

    从Gradle 2.4开始,您可以使用 gradle wrapper --gradle-version X.X 配置特定版本的Gradle包装器,而无需向 build.gradle 文件添加任何任务 . 下次使用包装器时,它将下载相应的Gradle分配 .

  • 204

    如果你想下载包含源和文档的gradle,那么在gradle-wrapper.properites中配置的默认分发URL将无法满足你的需要 . 它是 https://services.gradle.org/distributions/gradle-2.10-bin.zip ,而不是 https://services.gradle.org/distributions/gradle-2.10-all.zip . 这个完整的URL是由IDE如Android Studio建议的 . 如果你想要的话要下载完整的gradle,您可以像这样配置包装器任务:

    task wrapper(type: Wrapper) {
        gradleVersion = '2.13'
        distributionUrl = distributionUrl.replace("bin", "all")
    }
    
  • 8

    这是用于告诉Gradle升级包装器的命令,以便它将获取包含源代码的库的分发版本:

    ./gradlew wrapper --gradle-version <version> --distribution-type all
    

    使用“all”指定分发类型将确保Gradle下载源文件以供开发环境使用 .

    Pros

    • IDE可以立即访问源代码 . 例如,IntellijIDEA不会提示您更新构建脚本以包含源发行版(因为此命令已经执行了此操作)

    Cons

    • 更长/更大的构建过程,因为它正在下载源代码 . 这对于不需要源代码的构建或CI服务器来说是浪费时间/空间 .

    如果您知道任何命令行选项告诉Gradle不要在构建服务器上下载源,请发表评论或提供其他答案 .

  • 2
    • 您将生成一次,但如果您需要新功能或插件中的某些内容,则需要更新它们,而插件又需要更新的gradle版本 .

    最简单的更新方式:从Gradle 2.2开始,您只需下载并解压缩完整或二进制Gradle distribution,然后运行:

    $ <pathToExpandedZip>/bin/gradle wrapper
    

    虽然您可能需要某种 build.gradle 文件,但无需定义任务 .

    这将更新或创建 gradlewgradlew.bat 包装以及 gradle/wrapper/gradle-wrapper.propertiesgradle-wrapper.jar 以提供当前版本的gradle,包装 .

    • 这些都是包装器的一部分 .

    • 某些 build.gradle 文件引用子目录中的子项目或模块中的其他文件或文件 . 它有点复杂,但如果你有一个项目,你基本上需要一个文件 .

    • settings.gradle 处理项目,模块和其他类型的名称和设置,如果您愿意, gradle.properties 为您的gradle文件配置可重复使用的变量,并且您觉得它们会更清晰 .

相关问题