Hello every body,
Always about Jelly Fmt tag, Xdoc plugin and classloader, I am a bit confused
by Maven 1.0.2.
What is the difference between a defined Jelly Tag (extends BaseTagSupport)
and a closing tag defined in a plugin?
Please lets see a diff file between 2 plugin.jelly files:
* The first one uses Maven Tags defined in the jelly-tags Maven component. I
called them: <maven:grabClassLoader /> and <maven:unGrabClassLoader />
* The second one is the same code with a defined closing tag.
In a multiproject case, the first one produces the wanted value of the fmt
key and the other one produces ???myKey???.
My godfeeling is that I am not in the right classloader! Is the
MavenJellyContext not handling the same classloader between a defined jelly
tag and a closing tag? Maybe is it an interaction with others plugins?
Thanks a lot for your response!
Cheers,
Vincent
The following lines are from the GrabClassLoaderTag:
/*
* @see
org.apache.commons.jelly.Tag#doTag(org.apache.commons.jelly.XMLOutput)
*/
public void doTag(XMLOutput arg0) throws MissingAttributeException,
JellyTagException {
if (getMavenContext() == null) {
throw new JellyTagException("The current MavenContext is
null!");
}
checkAttribute(this.resource, "include");
ForeheadClassLoader currentClassLoader = null;
try {
currentClassLoader = (ForeheadClassLoader)
getMavenContext().getClassLoader();
} catch (ClassCastException e) {
throw new JellyTagException("The current classloader in the
MavenContext is not an instance of ForeheadClassLoader");
}
if (currentClassLoader == null) {
throw new JellyTagException("No classloader found in the current
MavenContext");
}
try {
File f = new File(this.resource);
currentClassLoader.addURL(f.toURL());
} catch (MalformedURLException e) {
throw new JellyTagException("The directory to include specified
by " + getResource() + " is malformed");
}
ForeheadClassLoader newClassLoader = new
ForeheadClassLoader(currentClassLoader, currentClassLoader.getName() +
"_tmp");
getMavenContext().setClassLoader(newClassLoader);
}
> -----Original Message-----
> From: Brett Porter [mailto:[EMAIL PROTECTED]
> Sent: Sunday, May 01, 2005 8:32 AM
> To: Maven Developers List
> Cc: 'Brett Porter'; 'Arnaud HERITIER'
> Subject: Re: I18n site
>
> Ah, I see. It was working inside the reactor for me, but not when you
> run a few projects. Because the classloader accumulates, you gather up
> other stuff, so the result never changes.
>
> You can develop a tag that does the following:
> - grab the existing classloader
> - create a new classloader that inherits the current one
> - add URL to the classloader
>
> and another tag that returns the old classloader. You'll see some of the
> java plugins (Eg hibernate) do something similar.
>
> If you need a hand, let me know... I can do it pretty easily.
>
> You mentioned your work was backwards compatible too... if so, I'm all
> for dropping it straight into the xdoc plugin as is and releasing it as
> 1.9
>
> - Brett
>
> Vincent Siveton wrote:
>
> >Hi Brett,
> >
> >
> >
> >>Sorry for the really long time it took to respond.
> >>
> >>
> >
> >
> >No problem :o)
> >
> >
> >
> >
> >>I didn't feel confident about copying files into the plugin cache
> >>directory, so I investigated it more. What I suggest is placing the
> >>bundles under the project directory somewhere - perhaps xdocs, or
> >>perhaps a new directory?
> >>
> >>
> >
> >
> >Me too! But it is the only solution that I found to solve the
> multiproject
> >limitation.
> >
> >
> >
> >
> >>Anyway, if it were xdocs, the following will work:
> >>
> >> <u:file var="f" name="${basedir}/xdocs" />
> >> <j:set
> >>var="dummy">${context.getClassLoader().addURL(f.toURL())}</j:set>
> >>
> >>
> >
> >
> >Already tried in the past: it seems that it doesn't work with a
> multiproject
> >goal... In this case, fmt always produces this following result:
> >???myKey???
> >But works fine for a single project. Any clues?
> >It is a known issue for maven:reactor?
> >
> >Regards,
> >
> >Vincent
> >
> >
> >
> >---------------------------------------------------------------------
> >To unsubscribe, e-mail: [EMAIL PROTECTED]
> >For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]