If you want to give each individual developer the ability to customize the
location of their Ivy cache, one approach is to add the following line to
your global ivysettings.xml:
<include file="${ivy.default.ivy.user.dir}/ivysettings.xml"/>
Then the user can define their own Ivy settings to their heart's content in
USER_HOME/.ivy2/ivysettings.xml. Note: if you do this, this local Ivy
settings file will be required.
Now, if your concern is doing ivy:cleancache for one project and then
cleaning out the whole cache, one way to do this is by establishing
namespaces for different projects. I don't have the details on that handy.
However, I don't quite see how clearing the Ivy cache would "crash the
building of other projects." If you do ivy:cleancache on one project or just
manually delete your USER_HOME/.ivy2/cache (or whatever you customize it
to), the only complication this should introduce is the extra wait that
comes with the re-downloading of the dependent modules on the next Ivy
resolve. So, unless I'm misunderstanding something, it kinda seems like
you're going to a lot of trouble to address a non-issue.
On Thu, Jan 15, 2009 at 9:25 PM, Yu, Aaron (IT) <[email protected]>wrote:
> Hi,
>
> I have a problem of using Ivy and IvyDE.
> At my firm we are in the process of switching to Ivy for managing our
> java dependencies. We do not want thousands of developers to resolve
> dependencies in different ways so we provide a centralized , read-only
> ivy-settings.xml file which is used by all developers. However, this
> presents us with a problem. We would like to make it possible for our
> users to set their own cache locations, because if they use the same
> cache location for all projects, when they clean the cache in one
> project, the whole cache location will be cleaned, and this will crash
> the building of other projects.
>
> I know we can create a project-specific ivy-settings.xml file, and use
> 'defaultCacheDir', 'resolutionCacheDir' and 'repositoryCacheDir'
> attributes in 'caches' element to set the project-based cache location.
> But as I mentioned above, to make all the projects more manageable and
> shareable, we do not encourage developers to have the project-specific
> ivy setting file.
>
> To get around this we have implemented a new properties page for the
> ivyde plugin under the existing one called simply 'Cache'. This allows a
> user to choose the cache location. The choices are: Default
> ($HOME/.ivy2) and Workspace (workspace_dir/.metadata/.ivy2). We then
> reset the ivy.home System property and trigger re-resolution of all
> project ivy classpath containers when the users changes this setting
> (the change affects all projects in the workspace since ivy core reads
> the ivy.home System property to find out where it should do its
> caching). However, we are now wondering if what is really needed is a
> private cache area for each project in the workspace, for example:
> workspace_dir/.metadata/.ivy2/project_name. But this is not possible at
> the moment due to the way in which ivy core decided where to place its
> cache. (And, as we said, we do not want users to have to specify their
> own ivy-settings for each project for this reason alone.)
>
> Other people at our firm have also pointed out that it might be better
> if ivy core used a version specific cache location by default since
> there could be differences in cache metadata between versions. This
> would cause cache corruption if different versions of ivy core were run
> on the same system.
>
> All this seems to indicate that the subject of caching needs rethinking
> in ivy core and ivyde, and we would like to ask for some suggestions on
> this.
>
> Thanks!
>
> Aaron Yu
> Morgan Stanley | Technology
> 222 Yan An Road (East)
> 200002 Shanghai
> Phone: +86 21 2321-2106
> [email protected]
> --------------------------------------------------------
>
> NOTICE: If received in error, please destroy and notify sender. Sender does
> not intend to waive confidentiality or privilege. Use of this email is
> prohibited when received in error.
>