如何/何时生成Gradle Package 器文件?

tct7dpnv  于 2023-05-18  发布在  其他
关注(0)|答案(8)|浏览(158)

我正在尝试了解Gradle Wrapper是如何工作的。在许多源代码库中,我看到以下结构:

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

我的问题:
1.如何/何时生成gradlew/gradlew.bat?当项目首次创建时,你应该只生成一次它们吗?你每次提交/推送更改时都生成它们吗?它们是如何产生的?
1.与上面的问题相同,但是对于gradle/wrapper/*文件(gradle-wrapper.jargradle-wrapper.properties)?
1.有时我会在项目的gradle目录中看到其他*.gradle文件。这些额外的Gradle文件是什么?它们代表/做什么?自定义插件?

  1. settings.gradle中的属性与gradle.properties中应该定义的属性有什么区别?
w8biq8rn

w8biq8rn1#

1.您只需生成一次,然后在想要更改项目中使用的Gradle版本时再次生成。没有必要如此频繁地生成。Here是文档。只需将wrapper任务添加到build.gradle文件并运行此任务以获取 Package 器结构。
请注意,您需要安装Gradle才能生成 Package 器。管理g-ecosystem工件的好工具是SDKMAN!。要生成gradle Package 器,请将以下代码段添加到build.gradle文件:

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

然后运行:

gradle wrapper

任务。将生成的文件添加到SCM(例如git),从现在开始,所有开发人员在使用Gradle Wrapper时都将使用相同版本的Gradle。
使用Gradle2.4(或更高版本),您可以设置 Package 器,而无需添加专用任务:

gradle wrapper --gradle-version 2.3

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

所有的细节都可以在这里找到
从Gradle 3.1--distribution-type选项也可以使用。选项为binary、allbinall 还包含源代码和文档。all 在使用IDE时也更好,因此编辑器工作得更好。缺点是构建可能会持续更长时间(需要下载更多数据,在CI服务器上毫无意义),并且会占用更多空间。
1.这些是Gradle Wrapper文件。您需要生成它们一次(针对特定版本)并添加到版本控制中。如果您需要更改Gradle Wrapper的版本,请在build.gradle中更改版本请参见(1.)并重新生成文件。
1.给予一个详细的例子。这样的文件可以具有多个目的:多模块项目、职责分离、稍微修改的脚本等。

  1. settings.gradle负责项目的结构(模块、名称等),而gradle.properties用于项目和Gradle的 * 外部 * 细节(版本、命令行参数-XX、属性等)。
gzszwxb4

gzszwxb42#

生成Gradle Wrapper

项目build 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

成功运行 Package 器任务并生成gradlew后,不要使用系统gradle。它会让你省去很多麻烦。

./gradlew assemble

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

com.android.tools.build:gradle:1.0.1

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

查看Android Studio生成的内容

gradle和最新Android Studio的加入极大地改变了项目布局。如果你有一个旧的项目,我强烈建议你用最新的Android Studio创建一个干净的项目,看看谷歌认为标准的项目是什么。
Android Studio有导入旧项目的功能,这也会有所帮助。

baubqpgj

baubqpgj3#

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

6vl6ewon

6vl6ewon4#

这是用来告诉Gradle升级 Package 器的命令,这样它就可以获取包含源代码的Gradle jar(只是Gradle,而不是库)的分发版本:

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

这现在可以使用Gradle构建本身来完成,将root build.gradle更改为包含:

tasks.named('wrapper') {
  distributionType = Wrapper.DistributionType.ALL
  gradleVersion = '7.5'
}

现在升级gradle Package 器:只需将代码更改为新版本,并在不使用任何参数的情况下运行wrapper任务。
使用“all”指定分发类型将确保Gradle为自己下载可供您的开发环境使用的源文件。

优点

  • IDE可以立即访问Gradle的源代码。例如,Intellij IDEA不会提示您更新构建脚本以包含源发行版(因为此命令已经完成了)
    缺点
  • 更长/更大的构建过程,因为它正在下载Gradle源代码。这是在构建或CI服务器上浪费时间/空间,其中不需要源代码(110 MB vs Gradle 7.4的150 MB)。

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

uz75evzq

uz75evzq5#

如果您想下载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.This完整URL,这是Android Studio等IDE建议的。如果您想下载完整的gradle,您可以这样配置 Package 器任务:

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

ezykj2lf6#

由于gradle内置任务在4.8中已弃用,请尝试以下操作

wrapper {
   gradleVersion = '2.0' //version required
}

然后跑

gradle wrapper
mzillmmw

mzillmmw7#

1.您将生成它们一次,但如果您需要新功能或插件中的某些内容,则需要更新它们,而这些插件又需要更新的gradle版本。
最简单的更新方法:从Gradle 2.2开始,您可以下载并解压完整的或二进制Gradle distribution,然后运行:

$ <pathToExpandedZip>/bin/gradle wrapper

不需要定义任务,尽管您可能需要某种build.gradle文件。
这将更新或创建gradlewgradlew.bat Package 器以及gradle/wrapper/gradle-wrapper.propertiesgradle-wrapper.jar,以提供当前版本的gradle, Package 。
1.这些都是 Package 的一部分。
1.一些build.gradle文件引用其他文件或子目录中的文件,这些子目录是子项目或模块。它变得有点复杂,但如果你有一个项目,你基本上需要一个文件。

  1. settings.gradle处理项目,模块和其他类型的名称和设置,gradle.properties为你的gradle文件配置可重用的变量,如果你喜欢,你觉得这样会更清楚。
wvyml7n5

wvyml7n58#

如果您使用的是Gradle 7.3.3或更高版本,您只需打开终端并运行:

gradle wrapper

就这样!

相关问题