Table of Contents
- Overview
- Basic Spring Dependencies with Maven
- Spring Persistence with Maven
- Spring MVC with Maven
- Spring Security with Maven
- Spring Test with Maven
- Using Milestones
- Using Snapshots
- Conclusion
1. Overview
This tutorial illustrates how to set upthe Spring dependencies via Maven. The latest Spring releases can be foundon Maven Central.
2. Basic Spring Dependencies With Maven
Spring is designed to be highly modular – using one part of Spring should not and does not require another. For example, the basic Spring Context can be without the Persistence or the MVC Spring libraries.
Let’s start with a fundamental Maven setup which will only usethespring-context dependency:
<properties> <org.springframework.version>5.2.8.RELEASE</org.springframework.version></properties><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework.version}</version> <scope>runtime</scope></dependency>
This dependency –spring-context – defines the actual Spring Injection Container and has a small number of dependencies:spring-core,spring-expression,spring-aop, andspring-beans. These augment the container by enabling support for some of thecore Spring technologies: the Core Spring utilities, theSpring Expression Language (SpEL), theAspect-Oriented Programming support and theJavaBeans mechanism.
Note we’re defining the dependency in theruntime scope – this will make sure that there are no compile-time dependencies on any Spring specific APIs. For more advanced use cases, theruntime scope may be removed from some selected Spring dependencies, but for simpler projects, there isno need to compile against Spring to make full use of the framework.
Also, note that JDK 8 is the minimum Java version required for Spring 5.2. It also supports JDK 11 as the current LTS branch and JDK 13 as the latest OpenJDK release.
3. Spring Persistence With Maven
Let’s now look atthe persistence Spring dependencies – mainlyspring-orm:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework.version}</version></dependency>
This comes with Hibernate and JPA support – such asHibernateTemplate andJpaTemplate – as well as a few additional, persistence related dependencies:spring-jdbc andspring-tx.
The JDBC Data Access library defines theSpring JDBC support as well as theJdbcTemplate, andspring-tx represents the extremely flexibleTransaction Management Abstraction.
4. Spring MVC With Maven
To use the Spring Web and Servlet support, two dependencies need to be included in thepom, again in addition to the core dependencies from above:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework.version}</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework.version}</version></dependency>
Thespring-web dependency contains common web specific utilities for both Servlet and Portlet environments, whilespring-webmvc enables the MVC support for Servlet environments.
Sincespring-webmvc hasspring-web as a dependency, explicitly definingspring-web is not required when usingspring-webmvc.
Starting Spring 5.0, for the reactive-stack web framework support, we can add the dependency forSpring WebFlux:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webflux</artifactId> <version>${org.springframework.version}</version></dependency>
5. Spring Security With Maven
Security Maven dependencies are discussed in depth in theSpring Security with Maven article.
6. Spring Test With Maven
The Spring Test Framework can be included in the project via the following dependency:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope></dependency>
With Spring 5, we can performconcurrent test execution as well.
7. Using Milestones
The release version of Spring is hosted on Maven Central. However, if a project needs to use milestone versions, then a custom Spring repository needs to be added to the pom:
<repositories> <repository> <id>repository.springframework.maven.milestone</id> <name>Spring Framework Maven Milestone Repository</name> <url>http://repo.spring.io/milestone/</url> </repository></repositories>
Once this repository has been defined, the project can define dependencies such as:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.0-M1</version></dependency>
8. Using Snapshots
Similar to milestones, snapshots are hosted in a custom repository:
<repositories> <repository> <id>repository.springframework.maven.snapshot</id> <name>Spring Framework Maven Snapshot Repository</name> <url>http://repo.spring.io/snapshot/</url> </repository></repositories>
Once the SNAPSHOT repository is enabled in the pom.xml, the following dependencies can be referenced:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.3.BUILD-SNAPSHOT</version></dependency>
As well as – for 5.x:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.0-SNAPSHOT</version></dependency>
9. Conclusion
This article discusses the practical details of usingSpring with Maven. The Maven dependencies presented here are of course some of the major ones, and several others may be worth mentioning and have not yet made the cut. Nevertheless, this should be a good starting point for using Spring in a project.