Interesting. And does it work too for filesets?

- Xavier

On 3/26/07, Eric Crahen <[EMAIL PROTECTED]> wrote:

It works the same way as a Path works.

When you do something like set the classpath attribute of a javac task you
are using a string. This can be 10 miles long if you'd like it do be, it
doesn't matter too much. Ant will assemble the same command line from this
to run the compiler as it would if you pass it a reference to a Path
object.
The same is true for pretty much every other task.

In fact, when you write an Ant component that accepts a Path you can pass
it
a property and Ant will coerce a Sring value into a Path for you (it just
wraps a string with a Path). This is how javac and others can accept
string
values from attributes.

We use properties for even extremely long paths where I work because its
just more versatile and easier on the user. You can print them, stick them
in tasks that take Paths, dump them into files, etc. Paths only fit in
path
shaped holes.

On 3/26/07, Xavier Hanin <[EMAIL PROTECTED]> wrote:
>
> On 3/26/07, Maarten Coene <[EMAIL PROTECTED]> wrote:
> >
> > I had originally the following syntax in mind:
> >
> > <ivy:settings settingsId="my-settings" settings="settings.xml" />
> > <ivy:resolve resolveId="my-resolve" settingsId="my-settings" />
> > <ivy:cachepath resolveId="my-resolve" settingsId="my-settings" />
> > ...
> >
> > But now that I see your suggestion, I think it's an interesting one as
> > well...
> >
> > the big difference between the resolveId and the settingsId is that
you
> > don't necessarily need to define the resolveId in the same build,
which
> > isn't the case with the settingsId. This is because the resolve
metadata
> is
> > persisted by the ivy core after a resolve and can be reused in a later
> > phase, where the settings are not persisted. The ability to do a
resolve
> in
> > another build and reuse the results later on is really important.
>
>
> +1, I think we should preserve this, and allow the kind of syntax you're
> talking about, Maarten. Having another syntax like what Eric suggests
> would
> be nice if users can still do something similar to what you suggest.
>
> For the properties vs reference thing, I'm wondering how it work. The
path
> contains a lot of information (possibly hundreds of file names) so I'm
> surprised you can use a String with no problem...
>
> - Xavier
>
> - Xavier
>
> regards,
> > Maarten
> >
> > ----- Original Message ----
> > From: Xavier Hanin <[EMAIL PROTECTED]>
> > To: [email protected]
> > Sent: Monday, March 26, 2007 8:48:55 PM
> > Subject: Re: ivy instances and ant properties
> >
> > On 3/26/07, Eric Crahen <[EMAIL PROTECTED]> wrote:
> > >
> > > I like your idea for the first case, this is possible to accomplish
> but
> > it
> > > works differently in Ant 1.7 than it does in Ant 1.6 so doing this
> would
> > > be
> > > a challenge. I would have to think about this a little - but I think
I
> > > could
> > > come up with something that might allow this work on both versions.
> I'll
> > > come back to this.
> > >
> > > The second idea is interesting; What do you think about the notion
of
> a
> > > profile?
> >
> >
> > I think this notion is very similar to the result of a resolve, and
what
> > Maarten has already done to isolate its scope. The main difference I
see
> > is
> > that it allows to specify the settings file too, which is not possible
> > with
> > the current Ivy trunk. There's also the vocabulary used, profile
instead
> > of
> > resolve. And maybe in your mind profile do not actually perform the
> > resolve,
> > I don't know. Anyway, this isn't too far from what already exist in
Ivy,
> > and
> > could be interesting I agree.
> >
> > <!-- Configure a profile -->
> > > <ivy:profile name="profile-1" settings="settings.xml"  ivy="ivy.xml"
> />
> > > <ivy:profile name="profile-2" ivy="ivy.xml">
> > >   <ivy:settings>
> > >     <!-- maybe have the option to set these all programtically w/ no
> xml
> > > -->
> >
> >
> > What do you mean by programmatically? Inlining the settings? Or having
a
> > really different syntax, using a scripting language for instance?
> >
> >   </ivy:settings>
> > > </ivy:profile>
> > >
> > > <!-- Using existing tasks -->
> > > <ivy:cachepath profile="profile1" conf="runtime"/>
> > > <ivy:retrieve profile="profile1" conf="runtime"/>
> > >
> > > <!-- Using possible future typdef -->
> > > <javac ...>
> > >   <classpath>
> > >     <ivy:path profile="profile1" conf="runtime"/>
> > >   </classpath>
> > > </javac>
> > >
> > > This gives you a nice way to have several effective complete
> > > configurations
> > > (where I'm using configuration to mean the ivysettings + an ivy
> > > descriptor)
> > > so that I single build.xml could work with many projects, and
> alternate
> > > settings.
> > >
> > > --
> > >
> > > Thinking about the first case, my use cases all involve at least a
> > > compilation and unit test using at least two configurations. Even my
> > > simplest projects,
> > >
> > > <ivy:path profile="profile1" conf="runtime" id="runtime-deps"/>
> > > <ivy:path profile="profile1" conf="build" id="test-deps"/>
> > >
> > > <!-- Build library -->
> > > <javac ... destdir="build/classes">
> > >   <classpath refid="runtime-deps"/>
> > > <javac/>
> > >
> > > <!-- Build tests, keep separate from the classes I plan to jar up
-->
> > > <javac ... destdir="build/tests">
> > >   <classpath>
> > >      <classpath refid="runtime-deps"/>
> > >      <classpath refid="test-deps"/>
> > >      <path path="build/classes"/>
> > >   </classpath>
> > > <javac/>
> > >
> > > <!-- Run tests -->
> > > <junit|testng ...>
> > >   <classpath>
> > >      <classpath refid="runtime-deps"/>
> > >      <classpath refid="test-deps"/>
> > >      <path path="build/classes"/>
> > >   </classpath>
> > > <junit|testng/>
> > >
> > > compared to
> > >
> > > <!-- Build library -->
> > > <javac ... destdir="build/classes">
> > >      <ivy:path profile="profile1" conf="runtime"/>
> > > <javac/>
> > >
> > > <!-- Build tests, keep separate from the classes I plan to jar up
-->
> > > <javac ... destdir="build/tests">
> > >   <classpath>
> > >      <ivy:path profile="profile1" conf="runtime"/>
> > >      <ivy:path profile="profile1" conf="build"/>
> > >      <path path="build/classes"/>
> > >   </classpath>
> > > <javac/>
> > >
> > > <!-- Run tests -->
> > > <junit|testng ...>
> > >   <classpath>
> > >      <ivy:path profile="profile1" conf="runtime"/>
> > >      <ivy:path profile="profile1" conf="build"/>
> > >      <path path="build/classes"/>
> > >   </classpath>
> > > <junit|testng/>
> > >
> > > I think it works out to be about the same amount of typing.
> >
> >
> > Probably, yes. But I think it makes things a little bit easier for
> simple
> > cases. For instance, when you want to use a custom antlib and want to
> use
> > Ivy to download it, you could do :
> >         <taskdef resource="emma_ant.properties" >
> >                <ivy:path organisation="emma" module="emma" revision="
> > 2.0.5312"
> >                        inline="true" conf="ant" />
> >         </taskdef>
> >
> > instead of
> >
> >         <ivy:cachepath organisation="emma" module="emma" revision="
> > 2.0.5312"
> >
> >                        inline="true" conf="ant" pathid="emma.classpath
> "/>
> >         <taskdef resource="emma_ant.properties" classpathref="
> > emma.classpath"
> > />
> >
> > which is more natural IMO.
> >
> > ---
> > >
> > > One thing I might consider for the future tasks is that the
equivalent
> > of
> > > the cachepath/resolve task should allow a property to be set instead
> of
> > a
> > > reference - or perhaps only should set a property instead of a
> > reference.
> > > The overhead in Ant is exactly the same, the uses are all pretty
much
> > the
> > > same too (set a classpathref= attribute or a classpath= attribute).
> >
> >
> > I thought properties were string only... I'm not familiar with the
> > difference between properties and reference enough to have an opinion.
> >
> > The one thing that makes me prefer the property is that its human
> readable
> > > without an extra step. To me that's a big win, its real easy for
> people
> > to
> > > understand thing because they can be <echo>'d easily. Sure, you can
> > still
> > > use another ant task to turn a ref into a path you can read - but I
> > think
> > > that in the case of a path, there is very little reason to use the
ref
> > > from
> > > a users standpoint. I think the one case for a ref is that certain
> > > operations if you assembling really complex paths might be slightly
> > faster
> >
> >
> > I'm not sure to see how you can use properties and how to echo 'em.
> >
> > Maybe the best option would be allow the user to pick
> > > <ivy:cachepath profile="profile1" conf="runtime"
> > > property="property-to-set"/>
> > > <ivy:cachepath profile="profile1" conf="runtime"
> id="reference-to-set"/>
> >
> >
> > Maybe. We need to preserve backward compatibility anyway, so I think
> that
> > even if we provide properties, we should still provide reference.
> >
> > - Xavier
> >
> > On 3/26/07, Xavier Hanin <[EMAIL PROTECTED]> wrote:
> > > >
> > > > What I would like to see:
> > > >
> > > > <copy todir="../new/dir">
> > > >     <ivy:fileset conf="compile"/>
> > > > </copy>
> > > >
> > > > <java classname="test.Main">
> > > >          <arg value="-h"/>
> > > >          <classpath>
> > > >                <ivy:path conf="runtime"/>
> > > >                <pathelement path="${java.class.path}"/>
> > > >          </classpath>
> > > > </java>
> > > >
> > > > But also maybe:
> > > > <ivy:resolve file="ivy.xml">
> > > >     <ivy:settings file="path/to/ivysettings.xml" />
> > > > </ivy:resolve>
> > > >
> > > > Or even the maybe ugly:
> > > > <ivy:retrieve conf="runtime">
> > > >     <ivy:resolve file="ivy.xml">
> > > >         <ivy:settings file="path/to/ivysettings.xml" />
> > > >     </ivy:resolve>
> > > > </ivy:retrieve>
> > > >
> > > >
> > > > I see a real added value for the first example. For the two other
> > ones,
> > > > I'm
> > > > not sure it's really better than setting an id when you call
> > configure,
> > > > and
> > > > then using this settings id when you call resolve (or anything
> else).
> > > >
> > > > WDYT?
> > > >
> > > > - Xavier
> > > > On 3/26/07, Eric Crahen <[EMAIL PROTECTED]> wrote:
> > > > >
> > > > > That's why I think we should start with what do we want to see
in
> a
> > > > > build.xml. We can work backwards and figure out what it would
take
> > to
> > > > get
> > > > > us
> > > > > there...
> > > > >
> > > > > On 3/26/07, Xavier Hanin <[EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > I'm interested too, not that I see a strong benefit of
> converting
> > > this
> > > > > > task
> > > > > > to a datatype, but more that I'm wondering about converting
> other
> > > > tasks
> > > > > > (like cachepath and cachefileset) to datatypes, and thus I'm
> > > > interested
> > > > > in
> > > > > > feedback about your experience.
> > > > > >
> > > > > > - Xavier
> > > > > >
> > > > > > On 3/26/07, Eric Crahen <[EMAIL PROTECTED]> wrote:
> > > > > > >
> > > > > > > You can actually still do this for nested types. Do you
think
> > you
> > > > > could
> > > > > > > show
> > > > > > > me what you ultimately want syntax to see in a build.xml?
I'm
> > sort
> > > > of
> > > > > > > interested and might have some feedback that could be
helpful.
> > > > > > >
> > > > > > > On 3/26/07, Gilles Scokart <[EMAIL PROTECTED]> wrote:
> > > > > > > >
> > > > > > > > Finally, I forget about using the datatype.  It is more
> > powerful
> > > > to
> > > > > > use
> > > > > > > an
> > > > > > > > ant task, with an id attribute.  This really looks like a
> > > > datatype,
> > > > > > but
> > > > > > > > you
> > > > > > > > have the execute method where you can place the code that
> you
> > > > want.
> > > > > > > >
> > > > > > > >
> > > > > > > > Gilles
> > > > > > > >
> > > > > > > > > -----Original Message-----
> > > > > > > > > From: Eric Crahen [mailto:[EMAIL PROTECTED]
> > > > > > > > > Sent: lundi 26 mars 2007 16:31
> > > > > > > > > To: [email protected]
> > > > > > > > > Subject: Re: ivy instances and ant properties
> > > > > > > > >
> > > > > > > > > On 3/25/07, Xavier Hanin <[EMAIL PROTECTED]> wrote:
> > > > > > > > > >
> > > > > > > > > > On 3/24/07, Gilles Scokart <[EMAIL PROTECTED]> wrote:
> > > > > > > > > > >
> > > > > > > > > > > I have found an additional issue with the
> <ivy:settings>
> > > > > dataype
> > > > > > > > > > > replacing the <ivy:configure>:  When loading of the
> > > > > > ivy.properties
> > > > > > > > > > > file ?
> > > > > > > > > > >
> > > > > > > > > > > This was currently done at the beguining of the
> > configure
> > > > > > task.  I
> > > > > > > > > > > will try to do it as soon as the datatype is
attached
> to
> > a
> > > > > > > > project.  I
> > > > > > > > > > > guess it is the earlier that I can do, and I hope it
> > will
> > > > > still
> > > > > > > > allow
> > > > > > > > > > > to predefine properties with a property task placed
> > before
> > > > the
> > > > > > > > > > > declaration of the ivy:settings.
> > > > > > > > > > >
> > > > > > > > > > > am I right?
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > I think so, but I don't know Ant datatypes very well,
so
> I
> > > > don't
> > > > > > > know
> > > > > > > > if
> > > > > > > > > > this can be a source of a problem or not. Maybe you
> could
> > > ask
> > > > on
> > > > > > ant
> > > > > > > > > list
> > > > > > > > > > unless an ant expert reads this thread and can answer
> > > > directly.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > I've done quite a bit with ant so if you give me a
slight
> > bit
> > > > more
> > > > > > > > context
> > > > > > > > > I
> > > > > > > > > can give you an answer.
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > >
> > > > > > > > > - Eric
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > >
> > > > > > > - Eric
> > > > > > >
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > - Eric
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > >
> > > - Eric
> > >
> >
> >
> >
> >
> >
> >
> >
> >
>
____________________________________________________________________________________
> > Never miss an email again!
> > Yahoo! Toolbar alerts you the instant new Mail arrives.
> > http://tools.search.yahoo.com/toolbar/features/mail/
> >
>



--

- Eric

Reply via email to