----- Rainer Noack wrote:

> just a hint:
> what's about <target/>'s if/unless attributes...

Both <target if=""> and <target unless=""> certainly have their uses.
And I don't hesitate to use them where it makes sense to do so.  But I
haven't found that they really help much with managing dependencies or
other "tricky" aspects of our build architecture.

One example of my frustration during my attempts did involve using
"unless":

    <target name="init" unless="init-done">
        <property name="init-done" value="true">
        <property file="${CONFIG}/dev.properties"/>
        <property file="${CONFIG}/runtime.properties"/>
    </target>

My intent was to ensure that the two .properties were only read once,
since I could see that my "init" target was being called over and over
(see the current thread with subject: "target dependencies").  This not
only slows things down, but it creates TONS of noise when using -verbose
to help debug scripts (since Ant whines non-stop about ignoring attempts
to redefine the properties which were previously set).

The problem with the above is that the "init-done" property isn't
persistent if an <antcall> or <ant> task was used.  For example:

   <target name="foo" depends="init"/>
   <target name="bar" depends="init"/>
   <antcall target="foo"/>
   <antcall target="bar"/>

Both of these <antcall> tasks will result in the "init" target being
executed again, even if "init" was executed earlier in this same script.
<sigh>


----- Rainer Noack wrote:

> BTW: How would you handle this in eclipse?

We're using Eclipse 3.1.  In the "Run" menu you can select "External
tools" -> "External tools...".  From there you can specify an Ant script
as the "Buildfile", as well as what "Targets" to execute.  This can be
saved (along with many other settings) as a named "Run Configuration"
which can be easily invoked from External Tools icon on the toolbar.

You can also use "Window" -> "Show View" -> "Ant" and add each build
file of interest to a tree-control showing available targets.
Right-clicking on a target allows it to be executed, but it's a bit
clunky.  NetBeans did a better job of integrating with Ant at this level
in my opinion.


----- Jon Jagger wrote:

>   <target name="com/wibblesoft/grammar/model"  depends="....">
>     <run-test-macro package="com/wibblesoft/grammar/model"/>
>   </target>
>
> The target name is not available via a property hence the duplication
:-(

I agree that it would be *really* nice to have a way to eliminate this
type of redundancy!


> The package name doubles as the package-folder it comes from.

I initially tried to use this trick with the *project* name:

    <project name="com/wibblesoft/grammar/model" ...>

    <javac includes="${ant.project.name}" ...>

But the difficulty in translating paths (with "/" chrs) to package names
(with "." chrs) caused too many headaches.

Thanks for sharing your nested <macrodef> code, Jon.  It's interesting
to see what other folks are doing to "get the job done".


----- Jon Jagger wrote:

> Now from the top level folder you can issue standard ant commands. Eg
>    >ant com/wibblesoft/grammar/model

Huh.  I think of "standard ant commands" like:  compile, test and clean.
I find it really convenient to leverage the directory I'm already in.
In other words, I'd much rather use:

    >cd com/wibblesoft/grammar/model
    >ant build

This allows me to define various commands to operate on the "current"
package (e.g. clean, javadoc, etc).


----- Jon Jagger wrote:

>  <target name="build-without-dependencies">
:
>  <target name="build-with-dependencies">

Interesting.  Instead of this, I've decided to use the equivalent of
"build-with-dependencies" and "build-everything" (I call them "build"
and "build-all").



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to