Hello,
As an introduction, I have an existing build system that I'm trying to
improve by using Ivy. I think Ivy is very cool, so big thanks for it!
I have a build server with projects checked out from CVS in one
directory like this:
projectA/
projectB/
projectC/
projectD/
....
Each project has in its root directory a build.xml and ivy.xml which
also come from CVS.
Each of these projects can build, tag, etc, itself and finally publish
its artifact to an Ivy repository independently without directly
referencing other projects. Now I'd like to implement a simple script
which polls CVS and builds automatically builds new artifacts from
projects which, well, need to be built. I can quite easily get a list
of these projects with the Ant task buildlist sorted so that, for
example, if A depends on B, B gets built and published before A.
During the buildlist processing, the script goes through each of the
projects to see if there are any changes in CVS and if there are, the
project gets built. This works fine except that there are also the
dynamic "latest.integration" revisions in the ivy.xmls and the script
doesn't know if some if the dynamic revisions have changed by just
polling CVS.
I think that my script would work like I wanted it to if it would
trigger a new build if the project has changed in CVS since the last
build *or* if the dynamic revisions have changed. Therefore I'm now
wondering what's the best way to check whether the dynamic revisions
have changed. My script can get to the "static" ivy.xml of the
previous build. It perhaps would work if the script executed
"resolve", "delivered" a new static ivy.xml and then somehow diffed
the static dependencies of the previous static ivy.xml to the new
static ivy.xml to decide whether a new build should be triggered.
Are the some easy ways to check if the dependencies of the latest
resolved ivy.xml differ from those of a previously resolved ivy.xml?
Or you think my approach is way off and that I should do it some other
way?