Thank you for your interest in contributing to BitcoinAddressFinder. This document explains how to build, test, and submit changes.
- Java 21 (OpenJDK or any compatible distribution).
- Maven 3.6.3+ — a Maven Wrapper (
./mvnw) is included; no separate installation required.
# Compile only
./mvnw compile
# Run the full test suite
./mvnw test
# Build a fat JAR with all dependencies (assembly profile)
./mvnw package -P assembly
# Build without running tests
./mvnw package -DskipTests
# Generate a JaCoCo code-coverage report (target/site/jacoco/index.html)
./mvnw test jacoco:report
# Skip LMDB-specific tests when native LMDB libraries are unavailable
./mvnw test -Dnet.ladenthin.bitcoinaddressfinder.disableLMDBTest=trueAfter building the assembly JAR, run it with a JSON configuration file:
java -jar target/bitcoinaddressfinder-*-jar-with-dependencies.jar \
examples/config_Find_8CPUProducer.jsonPre-built example configuration files and Windows batch scripts live in the
examples/ directory.
Tests are launched with -Xmx2g (the initial heap is left at the JVM default — no eager -Xms — because each test class runs in its own short-lived fork) and several --add-opens flags (for LMDB and internal module access). These are defined in pom.xml (<argLine>) and .mvn/jvm.config — the Maven Wrapper picks them up automatically.
Please use the GitHub issue tracker for bug reports, feature requests, and questions:
https://github.com/bernardladenthin/BitcoinAddressFinder/issues
When filing a bug, please include:
- Java version and OS.
- The configuration file (redact any sensitive key material).
- Full stack trace / log output.
- Steps to reproduce.
For security-sensitive issues, do not open a public issue — see SECURITY.md.
- Fork the repository on GitHub.
- Clone your fork locally:
git clone https://github.com/<your-username>/BitcoinAddressFinder.git
- Create a feature branch from
main:git checkout -b feat/my-feature main
- Make changes — write code and tests (see Test policy).
- Verify that the full test suite passes before pushing:
./mvnw test - Push the branch to your fork and open a Pull Request against
main. - A project maintainer will review the PR; address any requested changes and push additional commits to the same branch.
- Once approved and all CI checks pass, the PR will be merged.
The full architecture, design principles, Javadoc conventions, concurrency rules, and naming conventions are documented in:
CLAUDE.md— project overview, architecture, build, and conventions reference.CODE_WRITING_GUIDE.md— project-specific code-writing rules.
Highlights:
- Naming: configuration POJOs are prefixed
C(e.g.,CProducerJava); producer implementations are suffixed with type (e.g.,ProducerOpenCL); key-producer strategies followKeyProducerJava<Strategy>. - License headers: every source file carries the Apache 2.0 header, wrapped in
// @formatter:off/// @formatter:on. - Records and immutability are preferred for value objects.
Every new feature or behaviour change MUST include automated tests. Pull requests that add or change functionality without corresponding tests will be asked to add tests before merge. Bug fixes SHOULD include a regression test.
Detailed test-writing rules — framework, structure, naming, isolation, timeouts, and data providers — are documented in TEST_WRITING_GUIDE.md.
Static analysis: the build runs Error Prone with the NullAway plugin at compile time. All code in the net.ladenthin package tree must carry proper JSpecify nullness annotations (@Nullable from org.jspecify.annotations; @NonNull is the implicit default). Unannotated nullable returns or parameters, and Error Prone diagnostics, will fail the build.
This project follows the Conventional Commits 1.0.0 specification. Examples:
feat(keyproducer): add socket key producer
fix(consumer): close LMDB env on shutdown
docs(readme): refresh quickstart
chore(deps): bump guava to 33.5.0-jre
Common types: feat, fix, docs, refactor, test, chore, build, ci, perf. Keep the subject line ≤72 characters; use the body for the why.
- GitHub Issues — bug reports, feature requests, questions: https://github.com/bernardladenthin/BitcoinAddressFinder/issues
- GitHub Security Advisories — private vulnerability reports: https://github.com/bernardladenthin/BitcoinAddressFinder/security/advisories/new
All participants are expected to follow the project's Code of Conduct. Reports of unacceptable behaviour should be sent to the enforcement contact listed in that document.
The release procedure for this project — including the version-bump, tagging, and Maven Central publication steps — is documented in docs/RELEASE.md. Only maintainers cut releases.
By submitting a pull request you agree that your contribution will be licensed under the Apache License, Version 2.0 — the same license that covers this project. See LICENSE for the full license text. There is no separate CLA; inbound contributions are inbound=outbound under Apache 2.0.