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