Skip to content

[improve][misc] Upgrade jctools to 4.0.6 (jctools-core-jdk11)#25671

Merged
merlimat merged 1 commit intoapache:masterfrom
lhotari:lh-jctools-4.0.6
May 5, 2026
Merged

[improve][misc] Upgrade jctools to 4.0.6 (jctools-core-jdk11)#25671
merlimat merged 1 commit intoapache:masterfrom
lhotari:lh-jctools-4.0.6

Conversation

@lhotari
Copy link
Copy Markdown
Member

@lhotari lhotari commented May 5, 2026

Motivation

The JCTools 4.0.6 release is available, with various fixes since 4.0.5. Keeping the dependency current is generally desirable.

Starting with 4.0.6, JCTools publishes a separate jctools-core-jdk11 Maven artifact that adds proper Java 9 module support (a module-info descriptor) on top of jctools-core. Switching to this artifact is the recommended way to consume JCTools on JDK 9+.

BookKeeper is also upgrading to JCTools 4.0.6 (apache/bookkeeper#4776), so aligning the version in Pulsar avoids classpath skew between the two projects and lets Pulsar pick up the jctools-core-jdk11 enhancements at the same time.

JCTools is used in Pulsar by managed-ledger and pulsar-transaction-coordinator.

Modifications

  • Bump jctools version from 4.0.5 to 4.0.6 in gradle/libs.versions.toml.
  • Add a jctools-core-jdk11 library entry to the version catalog alongside the existing jctools-core. Both share the same version.ref = "jctools" so they stay aligned.
  • Switch the implementation declarations in managed-ledger and pulsar-transaction/coordinator from libs.jctools.core to libs.jctools.core.jdk11. The jdk11 variant transitively depends on jctools-core, so both jars end up bundled in the server distribution.
  • Update distribution/server/src/assemble/LICENSE.bin.txt to list both org.jctools-jctools-core-4.0.6.jar and org.jctools-jctools-core-jdk11-4.0.6.jar.

Verified locally with:

./gradlew assemble
./src/check-binary-license.sh distribution/server/build/distributions/apache-pulsar-*-bin.tar.gz
./src/check-binary-license.sh distribution/shell/build/distributions/apache-pulsar-*-bin.tar.gz

(All exit 0; the shell distribution does not bundle jctools.)

Verifying this change

  • Make sure that the change passes the CI checks.

This change is a trivial rework / code cleanup without any test coverage.

Does this pull request potentially affect one of the following parts:

  • Dependencies (add or upgrade a dependency)
  • The public API
  • The schema
  • The default values of configurations
  • The threading model
  • The binary protocol
  • The REST endpoints
  • The admin CLI options
  • The metrics
  • Anything that affects deployment

Dependency change details:

  • org.jctools:jctools-core 4.0.5 → 4.0.6
  • New direct dependency on org.jctools:jctools-core-jdk11 4.0.6 (replacing the previous direct jctools-core declaration; jctools-core itself is still bundled transitively through jctools-core-jdk11).

References

Switch from org.jctools:jctools-core to org.jctools:jctools-core-jdk11
and bump version 4.0.5 -> 4.0.6.

The jctools-core-jdk11 artifact is a drop-in replacement that adds
proper Java 9 module support (module-info) on top of jctools-core,
which is brought in transitively. Both jars are bundled in the server
distribution, so its LICENSE.bin.txt references both.

Both jctools-core and jctools-core-jdk11 are kept in the version
catalog sharing the same version reference, so any consumer that
pulls in either artifact directly resolves to the same version.

Release notes: https://github.com/JCTools/JCTools/releases/tag/v4.0.6
Changelog: JCTools/JCTools@v4.0.5...v4.0.6
@merlimat merlimat merged commit 844b07d into apache:master May 5, 2026
43 checks passed
poorbarcode pushed a commit to poorbarcode/pulsar that referenced this pull request May 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants