My organization is looking into using Apache Ivy for dependency management in a multi-project configuration. We have a main project (call it MAIN) where most development takes place and a few helper library projects (call it LIBPROJ) which we keep in separate repositories. What we do right now is to build jars for the library projects when they change, and commit them to the main project, but this is a big headache and leads to project bloat.
It looks like using something like ivy is a good fit. We envision using our Jenkins server to automatically build a new library jar for LIBPROJ and publish it to ivy, then using a "latest.integration" version to automatically pull in the latest version of LIBPROJ into MAIN. But if we have to bisect to find out when an issue cropped up, how can this work?
The only way I can think to do this right now is to change the version of LIBPROJ we depend on in MAIN whenever a change is made to LIBPROJ, but that's not much better than checking in the jar itself.
The reason I'm concerned about this is because in the case of looking at old versions of MAIN, if I just check one out it won't be possible to build and run because it's requesting the latest build, even tho the revision I'm looking at right now might be days/weeks/months out of sync. This will break any kind of bisection tools (like in git or mercurial), which is something I really don't want to do.
Because of your last remark, you shouldn't be using latest.integration. IMHO, the latest concept is particularly useful between projects in the same repositories, where you expect to clone/checkout them together.
I am using version numbers dependency in a case similar to yours. You could update the version number automatically, nonetheless.
you could create a script that (not my favorite):
1) builds the LIBPROJ libraries
2) then checkout the main and modifies the its dependency versions.
I, however, didn't encourage this when introducing IVY to my fellow colleagues. When you want a new version of LIBPROJ then create it and push it with a clear release.
Then change the dependency file in your MAIN.
1) It won't bloat of binaries.
2) creates sense of Tracking for which version is being used now.
3) Versioning.