Thanks a lot Stefan.

Exactly, I've trusted the Java API call code written by a coworker of
mine, but when I told him to check it twice he found he set the
basedir wrong. It happens in teamworking...

Thanks once again,
Jo

On Thu, Nov 17, 2011 at 12:45 PM, Stefan Bodewig <bode...@apache.org> wrote:
> On 2011-11-17, Jo Support wrote:
>
>> Hello everybody,
>
>> I've noticed a weird behavior from "xslt" task relating to relative
>> paths. It seems that "xslt" task set the context for the "style"
>> attribute relative path in two different ways, depending on the way
>> Ant has been executed (via command line, or via Java API).
>
>> Scenario:
>
>> Ant version: 1.8.0/1.8.2 (both act the same way)
>> OS: Windows XP
>
>> Directory tree:
>
>> /
>>       antscript/
>>       stylesheet/
>>       project/
>>               filestobetransformed/
>>                       somesubdirswithfilestobetransformedtoo/
>>                       xslttarget/
>
>> I assumed that the attribute "basedir" of "xslt" ant task should be
>> the working dir containing files to be transformed, and the path
>> written in "style" attribute should be indipendent from the "basedir",
>> so I wrote:
>
>>               <xslt basedir="/project/filestobetransformed/" extension=".xml"
>> destdir="xslttarget/" style="./../stylesheet/setThisAndThat.xsl">
>>                       <include name="**/pom.xml"/>
>>               </xslt>
>
> This is how it is supposed to work.  To make this work the XSLTProcess
> instance needs a Project instance set via setProject as it uses
> Project#resolveFile on the value of the attribute (which makes it
> relative to the project's basedir).
>
>> All works fine when I execute the Ant script via command line, but
>> when Ant is executed via Java API, it seems that the "./" heading the
>> relative path in "style" attrubute, leads to the "basedir" attribute
>> value,
>
> For historical reasons <xslt> contains some fallback logic that makes it
> resolve the stylesheet relative to the task's basedir, see line 357ff in
> <http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java>
>
>            if (xslFile != null) {
>                // If we enter here, it means that the stylesheet is supplied
>                // via style attribute
>                File stylesheet = getProject().resolveFile(xslFile);
>                if (!stylesheet.exists()) {
>                    stylesheet = FILE_UTILS.resolveFile(baseDir, xslFile);
>
> I guess what happens in your case is that when you use the task via the
> Java API your project instance's basedir isn't set properly and thus
> getProject().resolveFile(xslFile) resolves to a non-existant file.
>
> In a few minutes I'll modify Ant's trunk to revert the file name back to
> the one resolved by the project instance when reporting the file
> wouldn't exist.
>
> Stefan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
> For additional commands, e-mail: user-h...@ant.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org

Reply via email to