Please have a look at the paragraphs "Dealing with integration versions" in http://ant.apache.org/ivy/history/latest-milestone/bestpractices.html: The "typical" developer workflow using SNAPSHOT builds of a release, has become popular because it is the standard in Maven. A disadvantage of using SNAPSHOT-builds, is however that you can never be sure which build you have finally gotten after a dependency has been resolved. A more controlled way of dealing with your dependencies, is to create a new version for every build that is made, and to resolve for your local builds using the revision 'latest.integration' for "home-made" artifacts. Ivy supports both methods of resolving dependencies. The URL http://ant.apache.org/ivy/history/latest-milestone/bestpractices.html describes how you can implement the "SNAPSHOT" approach using Ivy.
Regards, Marc 2015-03-20 23:12 GMT+01:00 Loren Kratzke <lkrat...@blueorigin.com>: > 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. > >