Hi
I'm trying to work out how to configure Ivy to provide a set of
repositories for our project builds.
I have decided that it is essential for us to have an 'enterprise'
repository which contains our own copies of artifacts mostly obtained
from mave repositories. I have created a separate project which allows
me to install modules from either maven or from a local filing system.
Our projects typically have the following structure:
1. There are projects (ProjA, ProjB etc) with several sub-projects
where each sub-project creates a jar which have their own dependency ( A
-> B -> C)
2. These produce 'deliverables' which are in most cases wars but in some
cases jars. There is a second level of dependency between these
deliverables ( eg ProjB -> ProjA)
3. The deliverables come in flavors - test, QA, production.
4. Each of the sub-projects tends to share a lot of common libraries.
My current thoughts are to have for each main project a 'common' place
to put the 3rd party libs. This 'common' place has 3 sub directories:
compile
test
deploy
This means that each sub-project would share a common set of libs. My
reasoning behind this is that they are all going to end up in the same
jar, so it's probably better to do that than give each sub-project its
own libs because its then possible for different sub-projects to use
different versions which experience indicates leads to subtle class path
problems.
I (obviously) use ivy:resolve to get the appropriate libraries in from
the enterprise repository and also from the local repository.
The idea is that a developer would check out a project including all
its sub-projects and then as they modified and tested these sub-projects
use a 'publish-local' target to rebuild their own working version. When
finished, they would use a 'publish' target to publish new versions of
the deliverables back to a shared repository.
So, my questions are:
1. Does anyone see any pitfalls or drawbacks in this approach?
2. Should I use my 'enterprise' repository as the respository for our
deliverables or should I create a separate repository for internal
deliverables? Or does it not matter one way or the other?
At some point I intend to move to Luntbuild or similar for CI. Are there
any steps that I should take to make it easier to migrate an ivy-based
build system to Luntbuild?
Thanks in advance for comments. I'm begging to understand what can be
done with Ivy - its less clear what the best practices are.
Regards
Alan Chaney