The manifest can be customized by configuring the WAR Plugin's archiver. For full information on the different configuration options available check the documentation for Maven Archiver.
Generating a manifest classpath for a WAR is similar to for a JAR, but there are a couple of slight differences since you normally don't want a JAR in both the manifest classpath and the WEB-INF/lib directory. Customize the WAR Plugin's archiver:
<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> </plugin> ... </plugins> </build> ... </project>
Now, you can control which dependencies are included in WEB-INF/lib and in the manifest classpath by following these examples. Maven will follow the transitive dependency tree until it gets to artifacts scoped as "provided".
Note: No way is shown how to include a dependency in WEB-INF/lib but not in the manifest classpath.
<project> ... <dependencies> <dependency> <groupId>org.foo</groupId> <artifactId>bar-jar1</artifactId> <version>${pom.version}</version> <optional>true</optional> <!-- goes in manifest classpath, but not included in WEB-INF/lib --> </dependency> <dependency> <groupId>org.foo</groupId> <artifactId>bar-jar2</artifactId> <version>${pom.version}</version> <!-- goes in manifest classpath, AND included in WEB-INF/lib --> </dependency> <dependency> <groupId>org.foo</groupId> <artifactId>bar-jar3</artifactId> <version>${pom.version}</version> <scope>provided</scope> <!-- excluded from manifest classpath, and excluded from WEB-INF/lib --> </dependency> ... </dependencies> ... </project>
Check the Guide to Working with Manifests for more examples.