如何修复Gradle中‘setter for fileMode: Int?’已过时警告?
修复Gradle Copy任务中fileMode弃用警告并设置可执行权限
Gradle新版本中fileMode的setter已被弃用,推荐使用基于权限集合的API来设置文件权限,以下是几种可行的修复方案:
方案一:使用filePermissions(跨平台兼容)
直接通过filePermissions属性设置完整权限,替代原有的fileMode:
tasks { register("installLocalPostCommitGitHook", Copy::class) { from(File(rootProject.rootDir, "scripts/post-commit")) into(File(rootProject.rootDir, ".git/hooks")) // 设置权限为rwxr-xr-x(对应原0b111101101即755) filePermissions = org.gradle.api.file.FilePermissions.DEFAULT_FILE.copy( ownerRead = true, ownerWrite = true, ownerExecute = true, groupRead = true, groupExecute = true, othersRead = true, othersExecute = true ) } }
方案二:使用Posix文件权限(类Unix系统专用)
如果你的开发环境是类Unix系统(Linux/macOS),可以直接用标准的Posix权限枚举来设置:
import java.nio.file.attribute.PosixFilePermission import java.util.EnumSet tasks { register("installLocalPostCommitGitHook", Copy::class) { from(File(rootProject.rootDir, "scripts/post-commit")) into(File(rootProject.rootDir, ".git/hooks")) // 明确设置rwxr-xr-x权限,确保Git钩子可执行 posixFilePermissions = EnumSet.of( PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, PosixFilePermission.OWNER_EXECUTE, PosixFilePermission.GROUP_READ, PosixFilePermission.GROUP_EXECUTE, PosixFilePermission.OTHERS_READ, PosixFilePermission.OTHERS_EXECUTE ) } }
方案三:通过eachFile批量设置
如果需要对复制的多个文件统一设置权限,可以用eachFile回调:
tasks { register("installLocalPostCommitGitHook", Copy::class) { from(File(rootProject.rootDir, "scripts/post-commit")) into(File(rootProject.rootDir, ".git/hooks")) eachFile { // 在原有默认权限基础上添加可执行权限 filePermissions = filePermissions.copy( ownerExecute = true, groupExecute = true, othersExecute = true ) } } }
以上三种方案都能解决fileMode弃用警告,同时确保Git钩子文件拥有可执行权限,根据你的运行环境选择即可。
内容的提问来源于stack exchange,提问作者JBokMan95
相关产品推荐
相关产品推荐

