While reading in Chapter 13 "Managing Components and Dependencies" of Continous Delivery (July 2010, Addision Weslay)
I asked myself how would one implement this if you implement the
components (parts of the system, which change often) and
libraries (internal/external parts, which change very seldom) in your own project.
A while back (1) for example contributing to PHPUnit was kinda tricky. You had to git clone the
main repository and 11 different component repositorys. If you wanted to change something
in these components, you could do that there. If you run continous integration, every change
to those components needed to be in git master of those components. But how does one do a release then? Lots of tooling and in the end the release version number was hardcoded (2) and committed.
I am pretty sure that you know of some java project with dependencies, which work in
a similar fashion.
When discussing this with my co-workers at exozet, we have
been thinking how one approaches these concerns of lean development and safe releases
with Java and Maven (or gradle). Of course we are using
SemVer 2.0 as semantic versioning strategy. So I want to
present an approach, which I infered out of the books example and would like
to hear your opinion!