Resurrecting this due to 
http://forums.gradle.org/gradle/topics/source_code_generation

Actually, my example doesn't work.

> sourceSets {
>       main {
>               srcDir someGenerationTask.outputs.files
>       }
> }

This doesn't work because the implementation for DefaultSourceDirectorySet 
effectively drops any “buildable” information from incoming locations.  At the 
moment I don't think there is anyway to solve this without adding an explicit 
dependency to the compileJava task which doesn't seem right. I'd like to file a 
bug for this.

This is the most idiomatic example I could come up with that works:

   apply plugin: "java"

   task generateSources {
     outputDir = file("$buildDir/generated-src")
     outputs.dir outputDir

     doFirst {
       outputDir.exists() || outputDir.mkdirs()
       new File(outputDir, "Generated.java").write("public class Generated {}")
     }
   }

   compileJava.source generateSources.outputs.files, sourceSets.main.java


I think the best thing we could do would be to make adding a Buildable file 
collection to a SourceDirectorySet make the SourceDirectorySet “inherit” the 
buildable information from the incoming file collection. This would make my 
original example work.

On 19/07/2011, at 9:49 AM, Hans Dockter wrote:

> You are right. I haven't thought about it properly.
> 
> Thanks
> 
> Hans
> 
> --
> Hans Dockter 
> Founder, Gradle
> http://www.gradle.org, http://twitter.com/gradleware
> CEO, Gradleware - Gradle Training, Support, Consulting
> http://www.gradleware.com
> 
> 
> On Mon, Jul 18, 2011 at 5:23 PM, Luke Daley <[email protected]> wrote:
> 
> On 19/07/2011, at 4:52 AM, Hans Dockter wrote:
> 
>> At the moment if you need to generate sources, you typically create a 
>> dependencies between the compile task of the java source set and the task 
>> that generates the sources. Our antlr plugin does the same. It is a very 
>> common use case in the enterprise. I think a SourceSet functionality like we 
>> have for generate resources would be a much nicer solution.
>> 
>> Thoughts?
> 
> I think source generation is slightly different in that it's likely to be 
> more complex. I am also not sure what benefit it would have over…
> 
> sourceSets {
>       main {
>               srcDir someGenerationTask.outputs.files
>       }
> }
> 
> I have to admit that I don't know how this plays with directories vs files. 
> That is, how the output of a task needs to be structured to spit out a root 
> “srcDir”.
> 
> --
> Luke Daley
> Principal Engineer, Gradleware
> http://gradleware.com
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>   http://xircles.codehaus.org/manage_email
> 
> 
> 

-- 
Luke Daley
Principal Engineer, Gradleware 
http://gradleware.com


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to