I saw code like the following below in which in the from part anothers project s"war"-element is referenced. Finally the files of the war file are copied into my-directory.
I would like to know the inner working of gradle as from expects a set of files and the “war”-element is a task. How does this work?
task zipArtifact(type: Zip) {
into(‘my-directory’) {
from project(’:other-project’).war
} }
‘Zip#from’ accepts different kinds of arguments. As documented under ‘Zip’ in the Gradle Build Language Reference, ‘from someTask’ is the same as ‘from someTask.outputs.files’.
Thanks for your response.
In the documentation of Zip this feature is not mentioned (as far as I could read…).
I wonder where about in the gradle source code the from call is resolved as you mentioned. I checked the Zip-Class, AbstractCopyTask-Class etc. and couldn’t find anything.
Where does the Zip-Task write the zipped files so that it can be accessed later on via …outputs.files?
Thanks for any help (i am just curious… 
Go to docs for ‘Zip#from’, then follow the link to ‘Project#files’.
Do you have any hints regarding my questions concerning the source?
… I mean how does it come that the output of a task can be accessed via output.files… I found the class TaskOutputs and annotations like @OutputFile or @OutputDirectory but I couldn’t find any of these in war, jar or zip task or classes they inherit from…
Not sure what exactly your question is, but the body of ‘AbstractTask#getOutputs’ indicates that there is some code generation involved to override the method at runtime. To say more I’d have to dig deeper myself.