change file permission by gradle

Most of the solutions above are unnecessarily convolurted. Posting this so I can find it next time I look for it:

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

Create an Exec Task to change file permission. Add this in your build.gradle file

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

Run this using a doLast block. Your final build.gradle will look like this:

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

now running gradle fatJar should change the file permission. Make sure you set proper path in the filePermission task


If you want to embed it in an existing custom task, you use can Project.exec(Action<? super ExecSpec> action).

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

The project is available in most task implementations because it comes from AbstractTask.getProject().