Apache Pulsar support for Spring is released under the Apache License 2.0. This document helps you get started if you'd like to contribute or work on the code. See the README for the project background and modules.
If you use AI tooling, see Using AI tools. Agents also follow AGENTS.md.
We use GitHub issues to track bugs and enhancements.
If you're reporting a bug, please provide as much information as you can, as it speeds up the diagnosis. Ideally, include a small sample project that reproduces the problem.
Don‘t report vulnerabilities in public issues, and don’t disclose a vulnerability, or the security nature of a change, in a public issue, pull request or commit. See SECURITY.md for how to report them.
Please discuss large refactorings on dev@pulsar.apache.org before you start working on them. We recommend joining the mailing list before posting to it. The join instructions are on the Pulsar website.
You need:
Use the included Gradle wrapper, ./gradlew.
spring-javaformat-intellij-idea-plugin-<version>.jar from Maven Central, using the javaformat version in gradle/build-libs.versions.toml, and install it with Settings | Plugins | Install Plugin from Disk. It activates when IntelliJ IDEA imports the Gradle project, and shows an icon in the status bar. Code | Reformat Code then uses the project's formatting.999.import static all other importsjavajavaxorgorg.springframeworkall other importsTo also see Checkstyle violations in the editor, set up the CheckStyle-IDEA plugin with the Spring Java Format instructions, and use src/checkstyle/checkstyle.xml as the configuration file.
./gradlew build # Everything, including the tests ./gradlew build -PsampleTests # Also runs the sample application tests ./gradlew build -x test -x integrationTest -x dockerTest # Everything except the tests ./gradlew :pulsar-spring:test --tests '*PulsarTemplateTests' # Scope test runs while working ./gradlew :pulsar-spring-boot-autoconfigure:dockerTest ./gradlew :pulsar-spring-integration-tests:integrationTest ./gradlew :pulsar-spring-sample-apps:sample-pulsar-reader:test -PsampleTests # Scope a sample's tests ./gradlew :pulsar-spring-docs:antora # Site output in pulsar-spring-docs/build/site
The README also covers running the tests with another Pulsar image, against published artifacts and in a native image.
CI enforces the formatting, Checkstyle and license header rules. To check them without running the tests:
./gradlew checkFormat checkstyleMain checkstyleTest rat
./gradlew format. Format checks are disabled for the pulsar-spring module, so formatting can also change unrelated files there: review the diff, and keep those changes out of your commit.org.apache.pulsar.spring.org.apache.pulsar, set in gradle.properties, and published artifact IDs start with pulsar-spring. Spring Boot does not manage their versions.NOTICE and the migration page.@author tags. The ASF board discourages them, and the Git history records the authors. Checkstyle and CI reject them.java, javax, org, org.springframework and everything else, as separate groups.pulsar-spring-docs/src/main/antora. Don't add documentation to other modules. The Java and Kotlin snippets in pulsar-spring-docs/src/main are compiled, and the Configuration Properties appendix is generated from the auto-configuration metadata.pulsar-spring-sample-apps is a separate Gradle build that only shares the version catalog, and uses the artifacts by their coordinates. The main build includes it and substitutes its projects for them. Gradle's dependencies and dependencyInsight tasks hang for its projects when run through the main build, so run them in that directory with -PpulsarSpringRepository, as described in its README.adoc.main if no one else is using it. Pull requests are squashed or rebased when they're merged, not merged with a merge commit.fix:, docs:, build:, test:, ci:, refactor: or chore:.package-info.java file, and keep existing notices in imported code. ./gradlew rat checks this, with exclusions in .ratignore.Contributions made with AI tools must meet the ASF's Generative Tooling guidance:
Assisted-by: <tool/version> commit trailer, which is the default since a human still does the final review. Generated-by: <tool/version> is for minimally-modified generated output.See the discussion channels of the Apache Pulsar community on the Pulsar website, along with how to join them. The channels include:
The Apache Pulsar documentation is at https://pulsar.apache.org.