I added a link to the latest version of my XSLT plug-in to that page with a description and an example:

http://docs.codehaus.org/display/GRADLE/Plugins#Plugins-XsltPlugin

It can probably be improved but it 'works for me'.
-Paul

Philip Crotwell wrote:
Hi

Could you add this to the wiki, perhaps on the plugin page? An example
of how to use it would also be very useful.

http://gradle.codehaus.org/Plugins

thanks,
Philip

On Wed, Sep 22, 2010 at 10:32 AM, Adam Murdoch <[email protected]> wrote:
On 20/09/2010, at 12:52 AM, Paul Speed wrote:

Quiet list lately, but...

I tried moving this class (and some other things) into its own xslt.gradle
file so I could:
  apply from:'../gradle-plugins/xslt.gradle'

Unfortunately, I don't know the magic incantations necessary to get the Xslt
task class visible to my main build.gradle so that I can declare my own
tasks.  I always get a "project property Xslt does not exist error" and if I
try to reference the class directly for debugging (or to import it) I get an
actual class not found error.


Currently, classes defined in a script are not visible outside that script.
And so you can only use a task class within the script where it is defined.
This is something we want to fix.
A simple workaround is to set the task class as a project property in the
script:
project.Xslt = Xslt.class
class Xslt extends DefaultTask {... }
Then you should be able to do something like this in other scripts:
task transform(type: Xslt) { ... }

I'd rather not have to cut-paste this snippet everywhere I need it but I'm
feeling out of my depth.

Thanks in advance for any help or redirection.
-Paul

Paul Speed wrote:

I poked around and couldn't find any good examples of trying to make a task
to do simple XSLT on some source files.  (Specifically, I was trying to get
an HTML view of checkstyle's report because the XML makes my head hurt...)

Maybe there is something already built into gradle that I missed but anyway,
creating my own XSLT task wasn't 'too' bad.

I ended up cobbling from some of the gradle build files, specifically the
docbook to HTML task and here's what I came up with:

import javax.xml.transform.TransformerFactory

import javax.xml.transform.stream.StreamResult

import javax.xml.transform.stream.StreamSource

class Xslt extends SourceTask {

 @OutputFile @Optional

 File destFile

 @OutputDirectory @Optional

 File destDir

 @InputFile

 File stylesheetFile

 @TaskAction

 def transform() {

   if (!((destFile != null) ^ (destDir != null))) {

     throw new InvalidUserDataException("Must specify output file or dir.")

   }

   def factory = TransformerFactory.newInstance()

   def transformer = factory.newTransformer(

                         new StreamSource(stylesheetFile))

   source.visit { FileVisitDetails fvd ->

     if (fvd.isDirectory()) {

       return

     }

     File d = destFile;

     if( d == null )

       d = new File( destDir, fvd.file.name )

     transformer.transform(new StreamSource(fvd.file),

                           new StreamResult(d))

   }

 }

}

It seems to work for my limited use-cases but I'm totally open to criticism.
 Still a little new to groovy so some of the semantics might be off.

Maybe someone else finds it useful?  Seems like this (or something similar)
would be a good task to have built in.

-Paul

---------------------------------------------------------------------

To unsubscribe from this list, please visit:

  http://xircles.codehaus.org/manage_email


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

  http://xircles.codehaus.org/manage_email




--
Adam Murdoch
Gradle Developer
http://www.gradle.org
CTO, Gradle Inc. - Gradle Training, Support, Consulting
http://www.gradle.biz



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

    http://xircles.codehaus.org/manage_email




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

   http://xircles.codehaus.org/manage_email


Reply via email to