This Contributing Guide is intended for those that would like to contribute to Micrometer.
If you would like to use any of the published Micrometer modules as a library in your project, you can instead include the Micrometer artifacts from the Maven Central repository using your build tool of choice.
See our Contributor Code of Conduct.
Contributions come in various forms and are not limited to code changes. The Micrometer community benefits from contributions in all forms.
For example, those with Micrometer knowledge and experience can contribute by:
- Contributing documentation
- Answering Stackoverflow questions
- Answering questions on the Micrometer slack
- Share Micrometer knowledge in other ways (e.g. presentations, blogs)
The remainder of this document will focus on guidance for contributing code changes. It will help contributors to build, modify, or test the Micrometer source code.
Contributions in the form of source changes require that you fill out and submit the Contributor License Agreement if you have not done so previously.
The Micrometer source code is hosted on GitHub at https://github.com/micrometer-metrics/micrometer. You can use a Git client to clone the source code to your local machine.
Micrometer targets Java 8 but requires JDK 11 or later to build. If you are not running Gradle with JDK 11 or later and Gradle cannot detect an existing JDK 17 installation, it will download one. If you want to build the reference docs, you need to use JDK 17 or later.
The Gradle wrapper is provided and should be used for building with a consistent version of Gradle.
The wrapper can be used with a command, for example, ./gradlew
to build the project and check conventions.
This repository should be imported as a Gradle project into your IDE of choice.
The spring-javaformat plugin is configured to check and apply consistent formatting in the codebase through the build.
The checkFormat
task checks the formatting as part of the check
task.
Apply formatting with the format
task.
You should rely on the formatting the format
task applies instead of your IDE's configured formatting.
Specific modules or a test class can be run from your IDE for convenience.
The Gradle check
task depends on the test
task, and so tests will be run as part of a build as described previously.
Run ./gradlew pTML
to publish a Maven-style snapshot to your Maven local repo.
The build automatically calculates the "next" version for you when publishing snapshots.
These local snapshots can be used in another project to test the changes. For example:
repositories {
mavenLocal()
}
dependencies {
implementation 'io.micrometer:micrometer-core:latest.integration'
}
Micrometer has a number of integration tests that are implemented with Testcontainers and use Docker. These tests do not run by default.
The integration tests for Elasticsearch use the elasticsearch docker image that has the Elastic License 2.0. Do not run the Micrometer integration tests if you do not agree to the terms of the license.
You need a Docker daemon running for these tests to work. You can run them with the dockerTest
task. For example, with the Gradle wrapper: ./gradlew dockerTest
.