ant-ivy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Zac Jacobson <pie....@gmail.com>
Subject Re: cache busting and integration question
Date Mon, 23 Mar 2015 01:06:31 GMT
If you set your resolver’s checkmodified flag to true, it will verify the timestamp of the
published artifact and pull down a more recent version if the repo is newer than the cache.
I’ve found that if you have chained resolvers, you need to do this at the top level and
it affects all repos, not just your snapshot repository.

Also, if you set the force attribute for your local resolver, it will always take a version
from there rather than going to other resolvers in the chain. Once you’ve got changes published
to your snapshot or release repo, you’ll want to clean that artifact out of your local repo.

http://ant.apache.org/ivy/history/latest-milestone/settings/resolvers.html <http://ant.apache.org/ivy/history/latest-milestone/settings/resolvers.html>
> On Mar 20, 2015, at 15:12, Loren Kratzke <LKratzke@blueorigin.com> wrote:
> 
> I am encountering challenges with the Ivy cache and also with setting up what I would
consider to be a typical (if not classic) developer workflow. Here is the desired workflow:
> 
> I have a Nexus repository (releases and snapshots) plus a local file system repository
used for local development. I have Project which depends upon Library. I wish to modify Library,
publish locally, and then pull it into the local build of Project.
> 
> And for my Jenkins "continuous" integration server, if the copy of Library-1.0.0-SNAPSHOT
in Nexus is newer than what is in the cache on the build machine, then I would like Ivy to
grab the newer version (just like Maven does).
> 
> ISSUE #1
> 
> Assuming I start with an empty cache and empty internal repo on my local dev machine,
I build Project and it pulls Library from Nexus. Perfect. Works great. But then if I publish
Library locally and build Project again, I will get the cached version of Library that came
from Nexus. No matter what I do, I will always get the cached copy. This happens even though
my chain resolver specifies my internal repo before the Nexus repo.
> 
> If I blow away the cache, then I get my locally published build, but only if I blow away
the cache. Otherwise I get stale stuff. Issue #2 below is all about stale stuff.
> 
> I debugged Ivy (for hours upon hours) and during the resolve, it checks my internal repo,
finds the fresh artifact (yay!) and the next thing it does is checks its cache, finds a module
descriptor that points at Nexus, and proceeds to pull in the wrong artifact into Project.
> 
> The behavior is either a bug, or implies that Ivy assumes that an artifact can only come
from one place, and if it came from there once, it will come from there forever, and will
never change. Again, Ivy finds the artifact in local repo, stops searching, then ends up delivering
the cached artifact that came from Nexus sometime earlier.
> 
> ISSUE #2
> 
> I have been working on this problem for quite some time and I thought I had it fixed,
but I don't. That is, my integration server needs the latest snapshot build of Library-1.0.0-SNAPSHOT.
But what I get is the cached version from the Ivy cache. An SVN commit happens, triggers a
build of Library, Library get published, triggers a build of Project, and a stale build of
Library is delivered to Project from the cache (which breaks Project build).
> 
> SUMMARY
> 
> Ivy will resolve and cache deps, but once a dep is in the cache, that's what I get forever
until I blow away the cache. I see this question asked quite often regarding obtaining latest
integration versions, and I see that Ivy claims to support the local development workflow,
but I have yet to see a working example of either of these. Surely some of you have solved
these issues.
> 
> Is there any place anywhere in the world that has an example of development workflow
configuration and/or integration configuration? Can anybody provide an example? So far I have
not found anything, and advice on the net seems to be general suggestions like "try this,
try that" and nobody really has the configuration solution. Is Ivy capable of these behaviors
or do I need to hand roll a dependency management solution. Maven is too strict for these
projects (C++ code). Ivy is good if I can just obtain these fundamental behaviors.
> 
> Note that I have not provided any configs in this message that demonstrate the issues
I am having but definitely can upon request.
> 
> Thanks in advance,
> 
> L.K.
> 


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