Gradle8.5的init.d的init.gradle , init.d的位置 , x.gradle或x.gradle.kts的位置

官方文档 Initialization Scripts 章节

init.d文件夹的位置 , x.gradlex.gradle.kts 配置文件的位置

init.d可以有两个位置,

  1. 在gradle的安装目录GRADLE_HOME下默认就有 , gradle8.5压缩包解压后的目录里就有init.d文件夹,
    里面还有个read.txt文件,
    内容为"You can add .gradle (e.g. test.gradle) init scripts to this directory. Each one is executed at the start of the build.“,
    翻译为"您可以将.gradle(例如test.gradle)init脚本添加到此目录中。每一个都在构建开始时执行。”
  2. 在gradle的用户目录GRADLE_USER_HOME下要自己创建init.d文件夹,
    GRADLE_USER_HOME在不明确指定的情况下,默认为系统用户目录下的.gradle文件夹, 和maven默认的.m2在同一个文件夹
    默认 GRADLE_USER_HOME = 系统USER_HOME/.gradle/

自定义xxx.gradle自定义xxx.gradle.ktsinit.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

执行顺序

  1. GRADLE_USER_HOME/init.gradle
  2. GRADLE_USER_HOME/init.d/xxx.gradleGRADLE_USER_HOME/init.d/xxx.gradle.kts 多个按名称排序执行, 同名情况下,x.gradle先于x.gradle.kts执行
  3. GRADLE_HOME/init.d/xxx.gradleGRADLE_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 支持多种方式来使用它:

  1. 在命令行中指定:
    你可以在命令行中通过 -I--init-script 选项指定一个脚本文件。每次使用此选项时,你可以添加另一个 init 脚本。如果指定的任何文件不存在,构建将会失败。
  2. $GRADLE_USER_HOME/ 目录中放置一个名为 init.gradle(或 init.gradle.kts 对于 Kotlin)的文件:
    这是用户级别的 init 脚本,当 Gradle 启动时会自动执行。
  3. $GRADLE_USER_HOME/init.d/ 目录中放置一个以 .gradle(或 .init.gradle.kts 对于 Kotlin)结尾的文件:
    这允许你组织多个 init 脚本,并且它们将按照字母顺序执行。
  4. 在 Gradle 发行版的 $GRADLE_HOME/init.d/ 目录中放置一个以 .gradle(或 .init.gradle.kts 对于 Kotlin)结尾的文件:
    这允许你为你的企业中的所有构建打包自定义的 Gradle 分发,其中包含自定义的构建逻辑和插件。

如果你找到多个 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 文件之前运行,其实更完整的执行顺序如下:

  1. 首先加载 USER_HOME/.gradle/init.gradle 文件;
  2. 加载 USER_HOME/.gradle/init.d/ 目录下的以 .gradle 结尾的文件;
  3. 加载 GRADLE_HOME/init.d/ 目录下的以 .gradle 结尾的文件;
  4. 加载当前项目的 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.batDEFAULT_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




init.d下的x.gridle和x.gridle.kts仓库镜像源配置

gradle.kts (kotlin)
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()

	}
}
gradle (groovy)
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()

	}
}

你可能感兴趣的:(依赖管理,Maven,Gradle,等,JAVA,java,gradle)