ant-ivy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Buck" <>
Subject RE: newbie: cant get local and shared repository to work correctly
Date Wed, 22 Nov 2006 12:22:17 GMT
It would seem to me that the layering of resolvers/repositories is

- public (http) --> cache (per machine, per user) <--> local (per

But I am not sure where shared resides, and when/how it is created or


-----Original Message-----
From: Robert Buck [] 
Sent: Wednesday, November 22, 2006 7:18 AM
Subject: RE: newbie: cant get local and shared repository to work


Thank you for responding. Yes, I agree that the order in the chain is
backwards. Realizing that the behavior of the system is not quite what I
would have expected, relative to the documentation "Configuring default
resolver", I began thinking that my fundamental understanding of Ivy was
wrong. So I began experimenting by adding sections, dropping sections,
or reordering sections.

What is curious to me is the documented chained resolvers in the
tutorials. With great effort a a tiered design is implemented, but the
second tier, the shared resolver, apparently has no practical effect or

  <conf defaultResolver="default"/>
  <include url="${ivy.default.conf.dir}/ivyconf-public.xml"/>
  <include url="${ivy.default.conf.dir}/ivyconf-shared.xml"/>
  <include url="${ivy.default.conf.dir}/ivyconf-local.xml"/>
  <include url="${ivy.default.conf.dir}/ivyconf-main-chain.xml"/>
  <include url="${ivy.default.conf.dir}/ivyconf-default-chain.xml"/>

Or does it? What practical value does shared have above? It does not
seem to be used in any scenario that I have yet run into.


-----Original Message-----
From: Gilles Scokart []
Sent: Wednesday, November 22, 2006 2:48 AM
Subject: RE: newbie: cant get local and shared repository to work

I think you actually understand why cache exist.  The ivy notion of
cache is very similar to you shared repository.  It is owned by a user
and it cache libraries.

The only difference I see is that it will also 'cache' the result of any
resolve (including the artefacts that will be resolved in your local
repository).   Which might be a problem for you.  Is It?  If not (and
usually it is not), I think you should try to use the ivy cache as your
share repository.  Note that the cache doesn't need to be specified as a
resolver.  It is used implicitely, and will be filled automatically when
resolve modules.   Howerver, if you want to publish to it, you need to
use a
File resolver, or better, there is a non documented cache resolver.

The cache is also used to store some meta information that you usually
not have with an other repository.

However, your local repository is something very different.  You want a
repository per project (and per user).  You can implemented that with a
fileresolver as you did.

I'm just a little bit surprised by the chain order of your default
I would expect the rever order : first local, and if the dependency is
not found there, look in the shared, and only if it is not there look in
the public.


> -----Original Message-----
> From: Robert Buck []
> Sent: Wednesday, November 22, 2006 3:57 AM
> To:
> Subject: newbie: cant get local and shared repository to work 
> correctly
> I want to create a public, shared, and local repository. The public 
> repository is all set up and works.
> Hi,
> I have been successful in using Ivy so far. But I want to configure 
> multiple resolvers so that:
> 1. the shared directory is located in the ${user.home}/.ivy/shared 
> directory
> 2. the shared directory always retains copies of all artifacts 
> resolved so that each of the multiple user owned sandboxes may share 
> the third party libraries resolved from the public repository
> 3. the local repository is located within the sandbox so that no other

> sandbox may share its state
> 4. the local repository is where publications from sandbox modules go 
> as modules are built
> So, the point to shared repository in this model is for one individual

> to cache third party libraries, and to be able to resolve them from 
> any sandbox on demand. The shared repository is not shared between 
> users; users ought to be able to sterilize their shared repository to 
> deal with potential corruption, and enable testing of publications 
> between multiple sandboxes without impacting other users.
> I have tried writing several versions of the ivyconf files, with no 
> success.
> Could someone provide some insight to help me?
> Am I doing something wrong?
> Or do I have a misconception of how Ivy works?
> On the topic of terminology, what is a cache in Ivy? Is it distinct 
> from the shared and local repositories? How so? What is its purpose? I

> don't understand why it exists at all.
> Of note, no shared directory is ever created when files are resolved 
> or published. Here is an excerpt of how my Ivy is configured:
> <?xml version="1.0"?>
> <ivyconf>
>   <conf defaultCache="${workspace.root}/ivy/cache"
> defaultResolver="default-resolver"/>
>   <property name="ivy.local.default.root"
> value="${workspace.root}/ivy/local" override="true"/>
>   <property name="ivy.local.default.ivy.pattern"
> value="[organisation]/[module]/[revision]/[artifact].[ext]"
> override="true"/>
>   <property name="ivy.local.default.artifact.pattern"
> value="[organisation]/[module]/[revision]/[type]s/[artifact]-[
> [ext]" override="true"/>
>   <property name="ivy.shared.default.root"
> value="${user.home}/.ivy/shared" override="true"/>
>   <property name="ivy.shared.default.ivy.pattern"
> value="[organisation]/[module]/[revision]/[artifact].[ext]"
> override="true"/>
>   <property name="ivy.shared.default.artifact.pattern"
> value="[organisation]/[module]/[revision]/[type]s/[artifact].[ext]"
> override="true"/>
>   <resolvers>
>     <filesystem name="local-resolver">
>       <ivy
> pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}"/>
>       <artifact
> pattern="${ivy.local.default.root}/${ivy.local.default.artifac
> "/>
>     </filesystem>
>     <filesystem name="shared-resolver">
>       <ivy
> pattern="${ivy.shared.default.root}/${ivy.shared.default.ivy.p
>       <artifact
> pattern="${ivy.shared.default.root}/${ivy.shared.default.artif
> n}"/>
>     </filesystem>
>     <url name="public-resolver">
>       <ivy
> pattern="http://localhost:20080/ivyrep/[organisation]/[module]
> /ivy-[revi
> sion].xml"/>
>       <artifact
> pattern="http://localhost:20080/ivyrep/[organisation]/[module]
> /[revision
> ]/[artifact].[ext]"/>
>       <artifact
> pattern="http://localhost:20080/ivyrep/[organisation]/[module]
> /[revision
> ]/[artifact]-[revision].[ext]"/>
>     </url>
>     <chain name="default-resolver" returnFirst="true">
>       <resolver ref="public-resolver"/>
>       <resolver ref="shared-resolver"/>
>       <resolver ref="local-resolver"/>
>     </chain>
>   </resolvers>
> </ivyconf>

View raw message