官方文档 Initialization Scripts 章节
init.d
文件夹的位置 , x.gradle
或 x.gradle.kts
配置文件的位置init.d
可以有两个位置,
GRADLE_HOME
下默认就有 , gradle8.5压缩包解压后的目录里就有init.d
文件夹,GRADLE_USER_HOME
下要自己创建init.d
文件夹,GRADLE_USER_HOME
在不明确指定的情况下,默认为系统用户目录下的.gradle
文件夹, 和maven默认的.m2
在同一个文件夹GRADLE_USER_HOME
= 系统USER_HOME/.gradle/
自定义xxx.gradle
或自定义xxx.gradle.kts
和 init.gradle
的位置
自定义xxx.gradle
或自定义xxx.gradle.kts
只能在 init.d
文件夹中, 所以也是两个位置
GRADLE_HOME/init.d/
GRADLE_USER_HOME/init.d/
init.gradle
可以在三个位置
GRADLE_HOME/init.d/
GRADLE_USER_HOME/init.d/
GRADLE_USER_HOME/
GRADLE_USER_HOME/
下只能命名init.gradle
, 其他名称.gradle无效, init.gradle.kts也无效实际上应该说 init.gradle
只有一个位置, 就是 GRADLE_USER_HOME/
, 在init.d下因为可以任意取名而没有特殊意义,执行顺序按字母顺序, 只有 GRADLE_USER_HOME/init.gradle
是特别的, 它最先执行
同名情况下,x.gradle
先于x.gradle.kts
执行
GRADLE_USER_HOME/init.gradle.kts
不会执行, 用户文件夹下只会执行GRADLE_USER_HOME/init.gradle
执行顺序
GRADLE_USER_HOME/init.gradle
GRADLE_USER_HOME/init.d/xxx.gradle
和 GRADLE_USER_HOME/init.d/xxx.gradle.kts
多个按名称排序执行, 同名情况下,x.gradle
先于x.gradle.kts
执行GRADLE_HOME/init.d/xxx.gradle
和 GRADLE_HOME/init.d/xxx.gradle.kts
多个按名称排序执行, 同名情况下,x.gradle
先于x.gradle.kts
执行init.d文件夹的位置参考官方文档 Initialization Scripts 章节的 using_an_init_script 使用一个初始化脚本
Using an init script There are several ways to use an init script: •
Specify a file on the command line. The command line option is -I or
–init-script followed by the path to the script. The command line option can appear more than once, each time adding another init
script. The build will fail if any files specified on the command line
do not exist. • Put a file called init.gradle (or init.gradle.kts for
Kotlin) in the $GRADLE_USER_HOME/ directory. • Put a file that ends
with .gradle (or .init.gradle.kts for Kotlin) in the $
GRADLE_USER_HOME/init.d/ directory. • Put a file that ends with
.gradle (or .init.gradle.kts for Kotlin) in the $GRADLE_HOME/init.d/
directory, in the Gradle distribution. This lets you package a custom
Gradle distribution containing custom build logic and plugins. You can
combine this with the Gradle wrapper to make custom logic available to
all builds in your enterprise. If more than one init script is found,
they will all be executed in the order specified above. Scripts in a
given directory are executed in alphabetical order. For example, a
tool can specify an init script on the command line and another in the
home directory for defining the environment. Both scripts will run
when Gradle is executed.
翻译
使用一个init脚本,Gradle 支持多种方式来使用它:
-I
或 --init-script
选项指定一个脚本文件。每次使用此选项时,你可以添加另一个 init 脚本。如果指定的任何文件不存在,构建将会失败。$GRADLE_USER_HOME/
目录中放置一个名为 init.gradle
(或 init.gradle.kts
对于 Kotlin)的文件:$GRADLE_USER_HOME/init.d/
目录中放置一个以 .gradle
(或 .init.gradle.kts
对于 Kotlin)结尾的文件:$GRADLE_HOME/init.d/
目录中放置一个以 .gradle
(或 .init.gradle.kts
对于 Kotlin)结尾的文件:如果你找到多个 init 脚本,它们将按照上述顺序执行。同一目录中的脚本按字母顺序执行。例如,一个工具可以在命令行上指定一个 init 脚本来定义环境,并在 home 目录中指定另一个 init 脚本。当 Gradle 被执行时,这两个脚本都会运行。
总的来说,init 脚本是用于初始化构建环境、设置插件、配置任务等的强大工具。通过组合使用多种方法,你可以灵活地组织和执行多个 init 脚本,以满足你的构建需求。
翻译2
使用 init 脚本
有几种方法可以使用初始化脚本:
• 在命令行上指定文件。命令行选项是 -I 或 --init-script,后跟
脚本的路径。
命令行选项可以出现多次,每次添加另一个初始化脚本时。这
如果命令行上指定的任何文件不存在,则构建将失败。
• 将名为 init.gradle(或 Kotlin 的 init.gradle.kts)的文件放入 $GRADLE_USER_HOME/ 目录中。
• 将以 .gradle(或 Kotlin 的 .init.gradle.kts)结尾的文件放在 $
GRADLE_USER_HOME/init.d/ 目录。
• 将以 .gradle(或 Kotlin 的 .init.gradle.kts)结尾的文件放入 $GRADLE_HOME/init.d/ 中
目录中。
这样一来,您就可以打包包含自定义构建逻辑和插件的自定义 Gradle 发行版。
您可以将其与 Gradle 包装器结合使用,使自定义逻辑可用于
您的企业。
如果找到多个初始化脚本,它们将按上面指定的顺序全部执行。
给定目录中的脚本按字母顺序执行。例如,工具可以指定
init 脚本,另一个在主目录中用于定义环境。
这两个脚本都将在执行 Gradle 时运行。
理解1
init.gradle 在 build.gradle 文件之前运行,其实更完整的执行顺序如下:
USER_HOME/.gradle/init.gradle
文件;USER_HOME/.gradle/init.d/
目录下的以 .gradle
结尾的文件;GRADLE_HOME/init.d/
目录下的以 .gradle
结尾的文件;build.gradle
文件。默认 GRADLE_USER_HOME
= USER_HOME/.gradle/
实测1
在各配置文件夹创建x.gradle , x.gradle.kts 配置测试文件,
使用println("xxx"
; 打印,来判断顺序.
中文在Linux系统环境下显示正常.
在Windows系统环境下,如果中文无法正常显示 , 可以在启动JavaJvm的参数选项中加入 Dfile.encoding=UTF-8
选项 :
比如修改gradle安装目录下的bin目录下的gradle.bat
文件 .
GRADLE_HOME/bin/gradle.bat
的 DEFAULT_JVM_OPTS
选项
比如修改之前为:
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar"
修改后为:
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar" "Dfile.encoding=UTF-8"
实例截取
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
::原先的 set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar"
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" "-javaagent:%APP_HOME%/lib/agents/gradle-instrumentation-agent-8.5.jar" "Dfile.encoding=UTF-8"
编译程序时就会依次打印显示顺序
Starting Gradle Daemon...
Gradle Daemon started in 1 s 470 ms
GRADLE_USER_HOME下的init.gradle GRADLE_USER_HOME文件夹下必须用init开头
GRADLE_USER_HOME下的init.d下的aaa.gradle
GRADLE_USER_HOME下的init.d下的.gradle.kts
GRADLE_USER_HOME下的init.d下的init.gradle
GRADLE_USER_HOME下的init.d下的init.gradle.kts
GRADLE_USER_HOME下的init.d下的zice.gradle
GRADLE_USER_HOME下的init.d下的zice.gradle.kts
GRADLE_HOME下的init.d下的 aaa.gradle
GRADLE_HOME下的init.d下的 aaa.gradle.kts
GRADLE_HOME???init.d??? gbk.gradle
GRADLE_HOME???init.d??? gbk.gradle.kts
GRADLE_HOME下的init.d下的.gradle
GRADLE_HOME下的init.d下的.gradle.kts
GRADLE_HOME下的init.d下的init.gradle
GRADLE_HOME下的init.d下的init.gradle.kts
GRADLE_HOME下的init.d下的 zice.gradle
GRADLE_HOME下的init.d下的 zice.gradle.kts
> Task :prepareKotlinBuildScriptModel UP-TO-DATE
GRADLE_USER_HOME下的init.d下的.gradle.kts
GRADLE_USER_HOME下的init.d下的init.gradle.kts
GRADLE_USER_HOME下的init.d下的zice.gradle.kts
GRADLE_HOME下的init.d下的 aaa.gradle.kts
GRADLE_HOME???init.d??? gbk.gradle.kts
GRADLE_HOME下的init.d下的.gradle.kts
GRADLE_HOME下的init.d下的init.gradle.kts
GRADLE_HOME下的init.d下的 zice.gradle.kts
BUILD SUCCESSFUL in 30s
allprojects {
repositories {
mavenLocal()
maven ( "https://maven.aliyun.com/repository/central" )
maven ( "https://maven.aliyun.com/repository/public" )
maven ( "https://maven.aliyun.com/repository/spring")
maven ( "https://maven.aliyun.com/repository/google")
maven ( "https://maven.aliyun.com/repository/jcenter")
maven ( "https://maven.aliyun.com/repository/gradle-plugin")
maven ( "https://maven.aliyun.com/repository/spring-plugin")
maven ( "https://maven.aliyun.com/repository/grails-core")
maven ( "https://maven.aliyun.com/repository/apache-snapshots")
mavenCentral()
google()
}
}
allprojects {
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/repository/central/' }
maven { url 'https://maven.aliyun.com/repository/public/' }
maven { url 'https://maven.aliyun.com/repository/spring/'}
maven { url 'https://maven.aliyun.com/repository/google/'}
maven { url 'https://maven.aliyun.com/repository/jcenter/'}
maven { url 'https://maven.aliyun.com/repository/gradle-plugin/'}
maven { url 'https://maven.aliyun.com/repository/spring-plugin/'}
maven { url 'https://maven.aliyun.com/repository/grails-core/'}
maven { url 'https://maven.aliyun.com/repository/apache-snapshots/'}
mavenCentral()
google()
}
}