问题
I create .jar file and move it to dir, but I don't understand how I can change permission for this file after.
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
}
回答1:
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
回答2:
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()
.
回答3:
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 }
}
}
}
}
来源:https://stackoverflow.com/questions/39406822/change-file-permission-by-gradle