通过gradle更改文件权限

时间:2016-09-09 08:09:46

标签: gradle build.gradle

我创建.jar文件并将其移至dir,但我不知道如何在此之后更改此文件的权限。

task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': version,
                'Main-Class':'com.asd.App',
                'Class-Path': 'com.asd'
    }
    baseName = project.name + '-all'
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
    def file = file('/home/master/project/asd')
    fileMode = 755
    destinationDir = file
    with jar
}

4 个答案:

答案 0 :(得分:4)

创建Exec任务以更改文件权限。将其添加到build.gradle文件

task filepermission(type: Exec) {
    commandLine 'chmod', '700', '<file_path>'
}

使用doLast块运行此操作。您的最终build.gradle将如下所示:

task filepermission(type: Exec) {
    commandLine 'chmod', '700', '<file_path>'
}

task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': version,
                'Main-Class':'com.asd.App',
                'Class-Path': 'com.asd'
    }
    baseName = project.name + '-all'
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
    def file = file('/home/master/project/asd')
    fileMode = 755
    destinationDir = file
    with jar
    doLast {
        filepermission.execute()
    }
}

现在运行gradle fatJar应该更改文件权限。确保在filePermission任务

中设置正确的路径

答案 1 :(得分:4)

如果要将其嵌入现有的自定义任务中,可以使用Project.exec(Action<? super ExecSpec> action)

task changePermission {
  doLast {
    project.exec {
      commandLine('chmod',  '+x', '<fileLocation>')
    }
  }
}

project在大多数任务实施中都可用,因为它来自AbstractTask.getProject()

答案 2 :(得分:1)

上面的大多数解决方案都是不必要的。 发布此内容,以便下次查找时可以找到它:

distributions {
    main {
        contents {
            from fileTree('src/main/scripts'), {
                filesMatching('myscript') { mode = 0744 }
            }
        }
    }
}

答案 3 :(得分:1)

看看这里的解决方案,它们仅适用于 Linux 和 MacOS 等 Unix 风格的操作系统。对于 Windows,Exec 文件中的 gradle.kts 任务如下所示:

tasks {
    register<Exec>("makeFileExecutable") {
        workingDir(rootDir)
        commandLine("cmd", "755", "path/to/folderorfile")
    }
}

这对我有用。