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

news/2024/5/20 3:24:38 标签: java, gradle

官方文档 Initialization Scripts 章节

gradle__xgradlekts__5">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仓库镜像源配置

gradlekts__kotlin_177">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_201">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()

	}
}

http://www.niftyadmin.cn/n/5359869.html

相关文章

计算岛屿的数量-算法题(字节笔试题,做出来了,也被撸了)

题目 有一个二维数组,其中每个元素要么是1或者0,1表示土地,连起来的1表示一个岛屿,0表示海,请计算出来二维数组用有多少个岛屿 比如: {{1, 1, 1, 0, 1},{0, 1, 0, 1, 0},{1, 0, 1, 1, 1},{1, 1, 0, 1, 0…

共用体与枚举法,链表的学习

结构体注意事项: 1.结构体类型可以定义在main函数里面,但是此时的作用域就被限定在该函数中 2.结构体的的的定义的形式:a.先定义类型,后定义变量-----struct stu s b.定义类型的同时,定义了变量:struct…

[NOIP2003 普及组] 数字游戏

题目描述 丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共 n n n 个),你要按顺序将其分…

深度学习框架——动态图和静态图

深度学习框架之动态图 vs 静态图 🌵文章目录🌵 🌳引言🌳🌳静态图框架解析🌳静态图优势静态图局限性 🌳动态图框架解析🌳动态图优势动态图局限性 🌳应用场景🌳…

HCIA学习第五天:动态路由与RIP

动态路由与RIP 动静态路由的缺点: 静态路由缺点: 1、配置量大 2、不能基于拓扑的变化进行实时更新 动态路由的优点:可以基于拓扑的变化进行实时收敛 动态路由的缺点: 1、额外占用硬件资源 2、安全风险 3、选路错误的风险…

(一)hadoop搭建之环境准备1

1.参考http://www.fogsvc.com/97.html文档设置三台虚拟机并固定ip 192.168.1.10 hadoop-master 192.168.1.11 hadoop-slave1 192.168.1.12 hadoop-slave2 2.配置hosts vi /etc/hosts 添加内容 192.168.1.10 hadoop-master 192.168.1.11 hadoop-slave1 192.1…

Methodot低代码实战教程(一)——熟悉可视化Echart组件

一、产品介绍: Methodot是行云创新旗下一款面向研发使用的一站式云原生开发及应用托管平台,产品内有大量开箱即用的服务和开发工具,例如: 支持开发团队进行微服务架构设计(例如一个袜子商店管理系统)&…

某赛通电子文档安全管理系统 UploadFileList 任意文件读取漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…