ant-ivy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Lake <michael.l...@willowtreeapps.com>
Subject Re: Using ivy:retrieve sync="true" deletes my non-ivy managed jars
Date Fri, 30 Sep 2011 18:38:56 GMT

Obviously, getting things working "out-of-the-box" for the most common scenarios will help
lower the barrier to adoption for Ivy. Perhaps by explaining my use-case, it would help paint
a better picture of the path of a new user.

I'm dabbling with Ivy as a light-weight method to grab snapshots of a shared library which
is built with maven2 on our continuous integration server and published to our internal repo.

The library is a jar that we want to use in our android projects and we're working towards
making it open source. Since Android already creates an Ant build configuration, it seems
to make sense to use Ivy as a method of pulling releases/snapshots from our repo for our shared
library with minimal intrusion into existing projects. This is attractive compared with making
our Android projects into Maven projects which just requires too much overhead - not only
for us as an internal company, but also for end users who may not be so savvy with dependency
management.

From a new-user perspective, it seemed to me that Ivy should do a quick scan of the output
directory and use the output pattern [artifact]-[revision].[ext] as a way of determining if
there already existing artifacts copied to this dir and if there are, see if we need to delete
them because we'll be bringing in a different version of the same artifact.

Here's my current workaround which is a bit of a hack..

       <delete>
            <fileset dir="${ivy.lib.dir}" includes="oak-library*"/>
        </delete>
        <ivy:retrieve/>

This will go in an imported ant build file which is to be copied into any projects which use
the library - works, but not ideal.

I'd rather see Ivy do what I want as a new user right out of the box (or at least with a simple
flag). Sure, there's always the possibility that the Ivy output pattern gets changed and some
jars might get left laying around, but I think that's a small price to pay to give new users
a little more momentum with Ivy.

I'm sure I'm only scratching the surface of Ivy capability - I'm by no means an expert and
not looking to be one. 
But…I imagine once we've got a few projects with these ivy.xml files laying around, rather
than hunting down the latest version of commons-lang from apache's website, we'll be using
ivy.xml to bring in new libraries. And by then we'll be hooked.

Michael Lake
Senior Software Developer
WillowTree Apps
O 434-326-4341 | M 434.202.9223


On Sep 30, 2011, at 9:39 AM, Kirby Files wrote:

> Michael Lake wrote on 09/30/2011 09:11 AM:
> 
>> let's say I modify my ivy.xml to use a different version of oak, say version 1.0.4
> [...]
>> 
>> $ ant init-ivy-sync # here's it's doing<ivy:retrieve sync="true" />
>> 
>> $ ls -1 libs/ # as you can see, everything else gets deleted
>> oak-library-1.0.4-javadoc.jar
>> oak-library-1.0.4-sources.jar
>> oak-library-1.0.4.jar
> 
> Yes, that's the way sync=true works. You're telling Ivy that you'd like it to manage
the jars in the destination directory.
> 
>> ideally, I'd like to just have the oak-library*.jars change and everything else be
left alone (and no, I don't want to stick my other libs in the repository)
>> 
>> how can I accomplish this?
> 
> Do you have a proposal as to how you'd like Ivy to know which jars to remove, if you
only wanted jars previously retrieved by Ivy deleted? Consider the possible modifications
you may have made to ivy.xml or ivysettings.xml:
> 
> * change a module revision
> * change the source repo for the module
> * change the artifacts retrieved for a module
> * remove one or more modules from ivy.xml
> 
> Since the old copy of the ivy.xml isn't available for a diff, where would you keep the
data on what jars "belong" to ivy? Keep a file which stores all artifacts downloaded, with
filenames, hashes, etc.? Would that file survive a cacheclean? Or would a cacheclean cause
ivy to forget what had been previously downloaded? What if a jar already exists with the same
name as an artifact Ivy would retrieve, but a different hash? Or a jar with the same module
name but no/different revision than ivy would retrieve?
> 
> The current behavior is straightforward to explain and implement, which is a virtue.
That said, I imagine the Ivy devs would be willing to consider a patch to a different or additional
mode of operation, if you thought through the ramifications, not limited to the ones listed
above.
> 
> Thanks,
> ---
> Kirby Files
> Software Architect
> Masergy Communications
> kfiles@masergy.com


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message