This repository is structured as a multi-module Maven project except that each "module" is treated as distinct and inherits from pom-scijava instead of a single reactor pom.xml in the project.
For the initial release of SciJava Ops we were able to get away with keeping all intra-repo dependencies at project.version because each project was at the same 1.0.0 version. However, this left us with technical debt for releasing future individual components. We do not want to bump all component versions each time a single component needs release, as this creates a large amount of vacuous releases that are likely meaningless and violate (or at least mislead) SemVer.
First requirement, as standalone projects:
Problem 1:
Unfortunately, although these projects should be managed in pom-scijava, these are all release versions. Within the reactor we still want SNAPSHOT versions for these dependencies so that changes in one are immediately reflected in another, thus we can't actually use the component.version properties inherited from pom-scijava.
Discussion point: is this a technical requirement or one of convenience? If we keep everything release-coupled, the development process would be no different than if the projects were in separate repositories (e.g. manually pinning to SNAPSHOTs or "fake" versions for local testing) and we wouldn't have to worry about the enforcer, right?
Problem 2:
The maven-release plugin, and our release-version.sh script, don't support releasing individual components out of a multi-module reactor. Therefore we currently have no way to actually perform component releases reliably.
Second requirement:
This repository is structured as a multi-module Maven project except that each "module" is treated as distinct and inherits from
pom-scijavainstead of a single reactorpom.xmlin the project.For the initial release of SciJava Ops we were able to get away with keeping all intra-repo dependencies at
project.versionbecause each project was at the same1.0.0version. However, this left us with technical debt for releasing future individual components. We do not want to bump all component versions each time a single component needs release, as this creates a large amount of vacuous releases that are likely meaningless and violate (or at least mislead) SemVer.First requirement, as standalone projects:
dependencyManagementsection of the pom-scijava bill of materials, with appropriately namedcomponent.versionproperties defined.Problem 1:
Unfortunately, although these projects should be managed in
pom-scijava, these are all release versions. Within the reactor we still wantSNAPSHOTversions for these dependencies so that changes in one are immediately reflected in another, thus we can't actually use thecomponent.versionproperties inherited frompom-scijava.Discussion point: is this a technical requirement or one of convenience? If we keep everything release-coupled, the development process would be no different than if the projects were in separate repositories (e.g. manually pinning to
SNAPSHOTs or "fake" versions for local testing) and we wouldn't have to worry about the enforcer, right?Problem 2:
The maven-release plugin, and our release-version.sh script, don't support releasing individual components out of a multi-module reactor. Therefore we currently have no way to actually perform component releases reliably.
Second requirement:
maven-releasestepscomponent-name-component-versiontag with the release commit