ProxyBuilder v00.11.01 Release Notes
Release Date: 2026-05-28 // 15 days ago-
๐ Release Notes
00.11.01 โ 2026-05-28
๐ Patch release that fixes the Maven Central deployment of the 00.11.00
๐ feature set. Consumers should upgrade directly from 00.10.01 to
00.11.01 โ the 00.11.00 artifacts never made it to Central because
the newproxybuilder-annotationsmodule was missing from the bundle.No source / API changes since 00.11.00; the full feature description
(module split, nine new annotations, processor wiring, downstream
๐ smoke test, pitest baseline) lives inRELEASE_NOTES-00.11.00.md.What was broken in 00.11.00
๐ The release flow uses
scripts/clean-bundle-for-central.shbecause
๐central-publishing-maven-plugin0.10.0 is not Maven-4-aware (see
๐ the 00.10.00 release notes for the full story). That script copies
the publishable files directly out of~/.m2/repository/com/svenruppert/<module>/<version>/
based on a hardcodedMODULESarray โ and that array was not
โก๏ธ updated when 00.11.00 introduced the newproxybuilder-annotations
module.Consequence:
central-bundle.zipshipped to the Central Portal
contained onlyproxybuilder-parentandproxybuilder. Anyone
โ addingcom.svenruppert:proxybuilder-annotations:00.11.00to their
๐ build got an unresolved dependency.๐ Fixes
scripts/clean-bundle-for-central.sh:MODULESnow lists
proxybuilder-parent,proxybuilder-annotations,proxybuilder
(in that order โ parent first, then the annotations dependency,
then the processor).proxybuilder-annotations/pom.xml: inline<licenses>,
<scm>,<developers>added. Central Portal validates each
artifact's POM directly and does not resolve<parent>for these
required fields; without them, the validator would have rejected
๐ the bundle even if the script bug had been fixed.impl/pom.xml: same three inline blocks added preventively,
in case a future Central validator pass tightens the same check.
๐ This was already flagged in the 00.10.00 release notes as the
โช recommended workaround if Central ever rejected the bundle for
missing fields.
Verification
๐ After the release flow:
./mvnw clean install -P release,_release_prepare ./scripts/clean-bundle-for-central.sh unzip -l target/central-publishing/central-bundle.zip \|grep -c proxybuilder-annotations# expected: \> 0unzip -l target/central-publishing/central-bundle.zip \|grep -c build.pom# expected: 0unzip -l target/central-publishing/central-bundle.zip \|grep -c consumer# expected: 0Coordinates
<dependency> <groupId>com.svenruppert</groupId> <artifactId>proxybuilder-annotations</artifactId> <version>00.11.01</version> </dependency> <annotationProcessorPaths> <path> <groupId>com.svenruppert</groupId> <artifactId>proxybuilder</artifactId> <version>00.11.01</version> </path> </annotationProcessorPaths>๐ Recommended for future releases
The audit in
Anforderungen-proxybuilder-00.12.00.mdcollects the
โ known correctness, test-coverage, architecture and feature gaps that
๐ surfaced while preparing this release.
Previous changes from v00.10.00
-
๐ Release Notes
00.10.00 โ 2026-05-27
๐ First release under the new
com.svenruppert:proxybuildercoordinates.
๐ This is a modernization release: new groupId, JDK 26, Maven 4, JPMS, hardened annotation processors, and a Maven-Central-ready release workflow.Coordinates
<dependency> <groupId>com.svenruppert</groupId> <artifactId>proxybuilder</artifactId> <version>00.10.00</version> </dependency>For annotation processing:
<annotationProcessorPaths> <path> <groupId>com.svenruppert</groupId> <artifactId>proxybuilder</artifactId> <version>00.10.00</version> </path> </annotationProcessorPaths>JPMS module name:
com.svenruppert.proxybuilder.๐ฅ Breaking changes
- ๐ New Maven coordinates. The artifact has moved from the previous
00.09.05-RPMline tocom.svenruppert:proxybuilder:00.10.00. Update all<groupId>/<artifactId>references; the new artifact is not transitively compatible with the old one. - Java baseline raised to JDK 26. The compiler
releasetarget is26; consumers must build on JDK 26 or newer. - Maven 4 required. The build enforces Maven
4.0.0-rc-5via the Maven Wrapper; older Maven versions are not supported. - JPMS module descriptor. The implementation now ships
module-info.java(module com.svenruppert.proxybuilder). Consumers using the module path must require it explicitly; classpath consumers are unaffected. - ๐ Kotlin sources removed. All Kotlin code paths are gone; the artifact is pure Java again.
- ๐ JUnit 4 usage removed. Test code runs on JUnit 6 / Jupiter.
- ๐
javax.annotation-apiremoved fromtestusage. Demo@PostConstructwas replaced with a localdemo.reflections.PostConstruct. slf4j-simpleis no longer a library dependency. Consumers wiring the runtime proxies must supply their own SLF4J binding.- ๐
reflections8moved out of the main artifact intoproxybuilder-testusagetest scope. - Generated-source marker renamed. Generated classes now carry
@GeneratedByProxyBuilder(previouslyjavax.annotation.Generated-based).
๐ New features
Annotation-processor hardening. Static-proxy processors now fail compilation for unsafe method shapes with clear
Messagerdiagnostics:Method-level decorator hooks. Custom processors can now contribute code blocks per method via:
Annotation lookup helpers on
BasicAnnotationProcessor:Generated-class-suffix hook. Override
generatedClassSuffix(TypeElement)or set-Aproxybuilder.suffix=<Name>to control the generated type's simple name.Constructor-modifier hook. Override
filterConstructorModifiers(Set<Modifier>)to adjust generated constructor visibility.๐
addStaticImports(JavaFile.Builder)is now a default no-op โ implement it only when generated sources need static imports.๐จ Processor options.
@SupportedOptionsdeclaresproxybuilder.verbose,proxybuilder.suffix,proxybuilder.failOnStaticMethods.MethodIdentifieris a record with defensive copies; the same applies to the reflection-based variant used by the object adapter.
๐ Improvements
- JavaPoet 1.13.0 (was a much older release).
- Records,
var, and modern Java syntax used in the processor codebase where it improves readability. - Generic return-type handling in the static processors is refactored into focused helper methods (behavior preserved).
FilerExceptionis handled explicitly instead of by matching exception messages, making incremental rounds robust.- License headers deduplicated. Single EUPL-1.2 header per file across the project.
- README rewritten as a developer reference covering runtime proxies, static-proxy annotations, custom-processor authoring, decorators, JPMS, processor options, annotation inheritance, and incremental compilation.
๐ Build & toolchain
- โฌ๏ธ Maven parent
com.svenruppert:dependenciesupgraded to06.02.01, which fixes a duplicateattach-sources/jar-no-forkexecution that surfaced when_release_preparewas active alongside the project'sreleaseprofile. - ๐
maven-compiler-pluginraised to 3.15.0 for JDK 26 / class-file version 70 support (3.13.0's bundled ASM only reads up to v68 and broke during deploy-phase module-path inspection). - Maven Wrapper pinned to Maven 4.0.0-rc-5 via
requireMavenVersion. - ๐
releaseprofile attaches sources, javadoc, and GPG-signed artefacts; the parent's_release_prepareprofile contributes thejar-no-fork/test-jar-no-forkvariants. - JPMS validated with
jdeps --check com.svenruppert.proxybuilderas part of the development checks. - โ Tests: JDK-compiler-based processor hardening tests (positive + negative) cover logging, metrics, virtual proxy, static object adapter, dynamic object adapter, suffix option, and method-level decorator composition.
Maven Central โ current limitation
๐
central-publishing-maven-plugin0.10.0 (current latest at the time of release) is not Maven-4-aware:- ๐ It emits the Maven 4 consumer POM as a
*-consumer.pomclassifier and uploads the build POM as the primary.pom, which Central Portal's validator rejects withFailed to associate file with coordinates โฆ. - ๐ฒ It has no stage-only mode:
skipPublishing=trueskips staging entirely (No files to stage for artifactin the log).
โช Workaround (used to publish 00.10.00):
./mvnw clean install -P release,_release_prepare ./scripts/clean-bundle-for-central.sh# Upload target/central-publishing/central-bundle.zip via# https://central.sonatype.com/publishing โ Publish ComponentThe script reads
~/.m2/repository/com/svenruppert/<module>/<version>/(Maven 4's local installer already names the consumer POM correctly as<artifact>-<version>.pomand keeps the build POM under-build.pom), drops the non-publishable files, generates the four checksum types Central expects, and zips a bundle for manual upload. See the Releasing section of the README for the full release flow.๐ Central Portal also validates each artifact's POM directly and does not resolve
<parent>for required metadata, soimpl/pom.xmlnow carries<name>,<description>, and<url>inline.Known limitations & non-goals
- โ
proxybuilder-testusageintentionally keeps a smallmaven-antrun-pluginstep that compiles annotation-generated sources before test compilation; removing it currently breakstestCompilebecause some tests reference generated classes directly. The module is excluded from Central publishing. - ๐ Gradle incremental annotation-processing metadata is not published. Maven incremental compilation is verified.
- No GitHub Actions workflow is part of this release.
- ๐ฒ
HasLogger(fromcom.svenruppert:core) remains the logging seam โMessageris used only for compiler diagnostics, not for general logging.
๐ Project decisions carried into this release
- External parent
com.svenruppert:dependenciesstays. com.svenruppert:corestays incompilescope (required forHasLogger).- ๐
metrics-jmxstays as an intentional dependency because JMX/console reporting is part of the metrics support. slf4j-simpleis not provided as a transitive dependency.- โ
reflections8is only a test dependency inproxybuilder-testusage.
- ๐ New Maven coordinates. The artifact has moved from the previous