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 new proxybuilder-annotations module 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 in RELEASE_NOTES-00.11.00.md.

    What was broken in 00.11.00

    🚀 The release flow uses scripts/clean-bundle-for-central.sh because
    👀 central-publishing-maven-plugin 0.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 hardcoded MODULES array — and that array was not
    ⚡️ updated when 00.11.00 introduced the new proxybuilder-annotations
    module.

    Consequence: central-bundle.zip shipped to the Central Portal
    contained only proxybuilder-parent and proxybuilder. Anyone
    ➕ adding com.svenruppert:proxybuilder-annotations:00.11.00 to their
    🏗 build got an unresolved dependency.

    🛠 Fixes

    • scripts/clean-bundle-for-central.sh : MODULES now 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: 0
    

    Coordinates

    <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.md collects 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:proxybuilder coordinates.
    🚀 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-RPM line to com.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 release target is 26; consumers must build on JDK 26 or newer.
    • Maven 4 required. The build enforces Maven 4.0.0-rc-5 via 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-api removed from testusage. Demo @PostConstruct was replaced with a local demo.reflections.PostConstruct.
    • slf4j-simple is no longer a library dependency. Consumers wiring the runtime proxies must supply their own SLF4J binding.
    • 🚚 reflections8 moved out of the main artifact into proxybuilder-testusage test scope.
    • Generated-source marker renamed. Generated classes now carry @GeneratedByProxyBuilder (previously javax.annotation.Generated-based).

    🆕 New features

    • Annotation-processor hardening. Static-proxy processors now fail compilation for unsafe method shapes with clear Messager diagnostics:

    • 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. @SupportedOptions declares proxybuilder.verbose, proxybuilder.suffix, proxybuilder.failOnStaticMethods.

    • MethodIdentifier is 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).
    • FilerException is 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:dependencies upgraded to 06.02.01 , which fixes a duplicate attach-sources/jar-no-fork execution that surfaced when _release_prepare was active alongside the project's release profile.
    • 🔌 maven-compiler-plugin raised 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.
    • 🚀 release profile attaches sources, javadoc, and GPG-signed artefacts; the parent's _release_prepare profile contributes the jar-no-fork/test-jar-no-fork variants.
    • JPMS validated with jdeps --check com.svenruppert.proxybuilder as 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-plugin 0.10.0 (current latest at the time of release) is not Maven-4-aware:

    • 🏗 It emits the Maven 4 consumer POM as a *-consumer.pom classifier and uploads the build POM as the primary .pom, which Central Portal's validator rejects with Failed to associate file with coordinates ….
    • 🌲 It has no stage-only mode: skipPublishing=true skips staging entirely (No files to stage for artifact in 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 Component
    

    The script reads ~/.m2/repository/com/svenruppert/<module>/<version>/ (Maven 4's local installer already names the consumer POM correctly as <artifact>-<version>.pom and 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, so impl/pom.xml now carries <name>, <description>, and <url> inline.

    Known limitations & non-goals

    • proxybuilder-testusage intentionally keeps a small maven-antrun-plugin step that compiles annotation-generated sources before test compilation; removing it currently breaks testCompile because 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 (from com.svenruppert:core) remains the logging seamMessager is used only for compiler diagnostics, not for general logging.

    🚀 Project decisions carried into this release

    • External parent com.svenruppert:dependencies stays.
    • com.svenruppert:core stays in compile scope (required for HasLogger).
    • 👍 metrics-jmx stays as an intentional dependency because JMX/console reporting is part of the metrics support.
    • slf4j-simple is not provided as a transitive dependency.
    • reflections8 is only a test dependency in proxybuilder-testusage.