Re: cache busting and integration question

2015-03-22 Thread Marc De Boeck
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.




Re: cache busting and integration question

2015-03-22 Thread Zac Jacobson
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 lkrat...@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.