build: add graph-compose-core; keep graph-compose as a drop-in wrapper#301
Merged
Conversation
The 2.0 module split originally aimed to make bare `graph-compose` the lean core, which would make every existing consumer's `.buildPdf()` throw MissingBackendException at runtime after upgrading. Reverse that: the engine gets its own `graph-compose-core` coordinate, and `graph-compose` stays a drop-in that keeps rendering PDF, so existing consumers upgrade with zero changes. - Rename the root artifact `graph-compose` -> `graph-compose-core` (the engine sources stay at the root dir; only the coordinate string changes). - New wrapper/ module publishes the `graph-compose` coordinate as an empty jar (jar, not pom — a pom would force consumers to add <type>pom</type>) that depends on graph-compose-core. A `graph-compose` dependency now brings the engine transitively and renders PDF unchanged. - Repoint the engine-internal modules that need the engine classes directly (render-docx, testing, qa, benchmarks, including the tests-classifier jar) to graph-compose-core; bundle and examples stay on `graph-compose` (the wrapper). - Wire the aggregator, CI (build gate targets graph-compose-core; the examples job installs the wrapper), publish (deploy the wrapper after the core), cut-release (bump/commit/install the wrapper), jitpack (build both coordinates), and VersionConsistencyGuardTest (wrapper tracks the engine version). CHANGELOG describes the coordinate structure this ships. The core still carries the PDF backend and the templates; those move into their own modules over the rest of the 2.0 cycle.
…pose-core The wrapper's drop-in contract rests on it being a jar (not pom) that depends on graph-compose-core: a pom would force consumers to add <type>pom</type>, and dropping the core dependency would stop `graph-compose` from bringing the engine — either change would silently break every consumer at resolve with no test red. Add a VersionConsistencyGuardTest assertion locking both. Also correct a stale jitpack comment that still referenced the old wrapper directory name.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The 2.0 module split originally aimed to make bare
graph-composethe lean core —which would make every existing consumer's
.buildPdf()throwMissingBackendExceptionat runtime after upgrading to 2.0. This reverses that:the engine gets its own
graph-compose-corecoordinate, andgraph-composestays adrop-in that keeps rendering PDF, so existing consumers upgrade with zero changes.
What
graph-compose→graph-compose-core— the enginesources stay at the root dir, only the coordinate string changes.
wrapper/module publishes thegraph-composecoordinate as an emptyjar (jar, not pom — a pom would force consumers to add
<type>pom</type>andbreak their build) that depends on
graph-compose-core. Agraph-composedependency now brings the engine transitively and renders PDF unchanged.
(render-docx, testing, qa, benchmarks — incl. the tests-classifier jar) to
graph-compose-core. bundle and examples stay ongraph-compose(the wrapper),dogfooding the consumer path.
wrapper), CI (build gate targetsgraph-compose-core; theexamples job installs the wrapper), publish (deploy the wrapper after the core),
cut-release.ps1(bump/commit/install the wrapper), jitpack (build bothcoordinates), and
VersionConsistencyGuardTest(wrapper tracks the engine version).modules over the rest of the 2.0 cycle. Consumer imports are unchanged.
Tests
./mvnw -f aggregator/pom.xml clean verify→ BUILD SUCCESS, all 11modules, all tests green (incl. the wrapper-aware version guard).
graph-composedependency tree resolves tograph-compose → graph-compose-core (compile); the examples module (which dependson the
graph-composewrapper) renders 85 example PDFs.