1. Overview
This brief tutorial will describe Maven’s
For a refresher on Maven, check out our comprehensive guide.
2. What Is ?
Sometimes we’ll create a Maven project to be a dependency for other Maven projects. When working on such a project, it may be required to include one or more dependencies that are only useful to a subset of that project’s features.
If an end-user doesn’t use that feature subset, the project still transitively pulls in those dependencies. This bloats the user’s project size unnecessarily, and might even introduce conflicting dependency versions with other project dependencies.
Ideally, we should split the project’s feature subset into its own module and therefore not pollute the rest of the project. However, this is not always practical.
In order to exclude these special dependencies from the main project, we can apply Maven’s
3. How to Use
As we’re going to see we can include the
Let’s assume we have the following project pom:
<project>
...
<artifactId>project-with-optionals</artifactId>
...
<dependencies>
<dependency>
<groupId>com.baeldung</groupId>
<artifactId>optional-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>
In this example, although optional-project is labeled as optional, it remains as a usable dependency of project-with-optionals as if the
In order to see the effect of the
<project>
...
<artifactId>main-project</artifactId>
...
<dependencies>
<dependency>
<groupId>com.baeldung</groupId>
<artifactId>project-with-optionals</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
Now if we try to reference optional-project from within main-project, we see that optional-project doesn’t exist. This is because the
If we find that we need optional-project in our main-project, we simply need to declare it as a dependency.
4. Conclusion
In this article, we looked at Maven’s
The source code in this article is available over on Github.