43.4 Creating your own starter
A full Spring Boot starter for a library may contain the following components:
- The
autoconfigure
module that contains the auto-configuration code. - The
starter
module that provides a dependency to the autoconfigure module as well as the library and any additional dependencies that are typically useful. In a nutshell, adding the starter should be enough to start using that library.
Tip | |
---|---|
You may combine the auto-configuration code and the dependency management in a single module if you don’t need to separate those two concerns. |
43.4.1 Naming
Please make sure to provide a proper namespace for your starter. Do not start your module names with spring-boot
, even if you are using a different Maven groupId. We may offer an official support for the thing you’re auto-configuring in the future.
Here is a rule of thumb. Let’s assume that you are creating a starter for "acme", name the auto-configure module acme-spring-boot-autoconfigure
and the starter acme-spring-boot-starter
. If you only have one module combining the two, use acme-spring-boot-starter
.
Besides, if your starter provides configuration keys, use a proper namespace for them. In particular, do not include your keys in the namespaces that Spring Boot uses (e.g. server
, management
, spring
, etc). These are "ours" and we may improve/modify them in the future in such a way it could break your things.
Make sure to trigger meta-data generation so that IDE assistance is available for your keys as well. You may want to review the generated meta-data (META-INF/spring-configuration-metadata.json
) to make sure your keys are properly documented.
43.4.2 Autoconfigure module
The autoconfigure module contains everything that is necessary to get started with the library. It may also contain configuration keys definition (@ConfigurationProperties
) and any callback interface that can be used to further customize how the components are initialized.
Tip | |
---|---|
You should mark the dependencies to the library as optional so that you can include the autoconfigure module in your projects more easily. If you do it that way, the library won’t be provided and Spring Boot will back off by default. |
43.4.3 Starter module
The starter is an empty jar, really. Its only purpose is to provide the necessary dependencies to work with the library; see it as an opinionated view of what is required to get started.
Do not make assumptions about the project in which your starter is added. If the library you are auto-configuring typically requires other starters, mention them as well. Providing a proper set of default dependencies may be hard if the number of optional dependencies is high as you should avoid bringing unnecessary dependencies for a typical usage of the library.