Thanks for the info. I picked up on both of these. Using a tag is preferred since it can take params. The problem is that (as I reported in another message which I'll quote below, when I define a custom tag (basically the same as in your example) the maven context seems to be available when you are in a pregoal (and presumably a goal), but not when you are in the custom tag itself. I was going to try to dig a bit deeper into this, but it requires running maven in a debugger or looking at stuff a lot more closely, and I haven't had time yet.
-----
If is use something like:
<path id="mypath1" location="${basedir}/one"/>
<path id="mypath2" location="${basedir}/two"/>
<maven:addPath id="mypath1" refid="mypath2"/>
in a preGoal, it works fine. But if I use jelly:define:tag to define a custom tag called let's say 'my:tag", which contains the same lines as above, and in the preGoal at the same location invoke <my:tag>, I get a ClassCastException at
at org.apache.maven.jelly.tags.BaseTagSupport.getMavenContext(BaseTagSupport.java:72)
at org.apache.maven.jelly.tags.maven.AddPathTag.doTag(AddPathTag.java:92)
at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:278)
at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:133)
at org.apache.commons.jelly.impl.DynamicTag.doTag(DynamicTag.java:112)
...
from which all I can conclude is that the context being found is a base JellyContext, not a MavenJellyContext.
Can anybody explain what is going on? I have tried defining the tag itself as a child of <project> in maven.xml, and also to test, as a child of <preGoal>, with no difference in behaviour. I was trying to do this to investigate using custom tags as subroutine/macro mechanisms.
-----
James Strachan wrote:
To define simple blocks of repeatable code, you can use the simple
<define:script> and <define:invoke> tags.
e.g.
<define:script var="myScript">
... do something here ...
</define:script>
... then much later...
<define:invoke script="${myScript}"/>
If you want much more control and to parameterize the blocks, you can define
a new tag library with one or more new tags in their own namespace then use
normal XML attributes to customize the blocks.
e.g.
<project xmlns:j="jelly:core"
xmlns:my="myLibrary">
<define:taglib uri="myLibrary">
<define:tag name="foo">
<echo>invoked with a = ${a}</echo>
</define:tag>
...
</define:taglib>
Then to invoke your 'subroutine' (your tag) maybe parameterizing it
somewhat...
<my:foo a="${123-2}"/>
which would output
invoked with a = 121
So there's simple scripts you can just invoke, or more well defined tags
(optionally with attribute validation) which you can define with Jelly
script and invoke with parameterized values.
James
-------
http://radio.weblogs.com/0112098/
----- Original Message -----
From: "Colin Sampaleanu" <[EMAIL PROTECTED]>
To: "Turbine Maven Users List" <[EMAIL PROTECTED]>
Sent: Wednesday, January 29, 2003 7:51 PM
Subject: What is maven/jelly equivalent of ant's antcall?
Ant's antcall task is sometimes used to do 'subroutine' style calls into
other targets from one or more locations within an ant build file. To
some extent this is not too clean since it mixes up usage of targets as
run due to dependencies vs. targets run as subroutines, but it does
work. I am trying to figure out the best way to do something similar in
Maven/Jelly.
One way I can think that should work is to use Jelly's define:tag tag to
define a new tag for the funtionality I need, and then just use that tag
appropriately... Another way would be to use jeez:target to wrap a goal,
and then use antcall to call it.
Anybody have any suggestions on the best way to do this?
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
