Deployable.setFile() takes a string, not a file. this means that the task itself has to take on all responsiblility of using Project.resolveFile() to resolve a relative file path into an absolute one.; It does not do this. Anyone trying to pass in a relative file to the task will not find it works right, especially when you do a complex nested deployment.
Fix 1: use getProject().resolveFile() to resolve the file.
fix 2: change the type of the setter to be java.io.File, and have the runtime do the work for you.
30s work, either way.