Which maven dependencies to include for spring 3.0?

JavaSpringMaven 2Dependencies

Java Problem Overview


I am trying to do my first project with Spring 3.0 (and maven). I have been using Spring 2.5 (and primer versions) in quite some projects. Nevertheless I am kinda confused, what modules I have to define as dependencies in my pom.xml. I just want to use the core container functions (beans, core, context, el).

I was used to do this:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>2.5.6</version>
</dependency>

But now I am kinda confused, as there is no full packed spring module for version 3.0 anymore. I tried the following but it didnt work (some classes are missing).

    <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-core</artifactId>
	    <version>3.0.0.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-expression</artifactId>
	    <version>3.0.0.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>3.0.0.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>3.0.0.RELEASE</version>
	</dependency>

Any help would be appreciated!

Java Solutions


Solution 1 - Java

There was a really nice post on the Spring Blog from Keith Donald detailing howto Obtain Spring 3 Aritfacts with Maven, with comments detailing when you'd need each of the dependencies...

<!-- Shared version number properties -->
<properties>
	<org.springframework.version>3.0.0.RELEASE</org.springframework.version>
</properties>
<!-- Core utilities used by other modules.
	Define this if you use Spring Utility APIs 
	(org.springframework.core.*/org.springframework.util.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Expression Language (depends on spring-core)
	Define this if you use Spring Expression APIs 
	(org.springframework.expression.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-expression</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Bean Factory and JavaBeans utilities (depends on spring-core)
	Define this if you use Spring Bean APIs 
	(org.springframework.beans.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-beans</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Aspect Oriented Programming (AOP) Framework 
	(depends on spring-core, spring-beans)
	Define this if you use Spring AOP APIs 
	(org.springframework.aop.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aop</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Application Context 
	(depends on spring-core, spring-expression, spring-aop, spring-beans)
	This is the central artifact for Spring's Dependency Injection Container
	and is generally always defined-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Various Application Context utilities, including EhCache, JavaMail, Quartz, 
	and Freemarker integration
	Define this if you need any of these integrations-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Transaction Management Abstraction 
	(depends on spring-core, spring-beans, spring-aop, spring-context)
	Define this if you use Spring Transactions or DAO Exception Hierarchy
	(org.springframework.transaction.*/org.springframework.dao.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-tx</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- JDBC Data Access Library 
	(depends on spring-core, spring-beans, spring-context, spring-tx)
	Define this if you use Spring's JdbcTemplate API 
	(org.springframework.jdbc.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA and iBatis.
	(depends on spring-core, spring-beans, spring-context, spring-tx)
	Define this if you need ORM (org.springframework.orm.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-orm</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Object-to-XML Mapping (OXM) abstraction and integration with JAXB, JiBX, 
	Castor, XStream, and XML Beans.
	(depends on spring-core, spring-beans, spring-context)
	Define this if you need OXM (org.springframework.oxm.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-oxm</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Web application development utilities applicable to both Servlet and 
	Portlet Environments 
	(depends on spring-core, spring-beans, spring-context)
	Define this if you use Spring MVC, or wish to use Struts, JSF, or another
	web framework with Spring (org.springframework.web.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-web</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Spring MVC for Servlet Environments 
	(depends on spring-core, spring-beans, spring-context, spring-web)
	Define this if you use Spring MVC with a Servlet Container such as 
	Apache Tomcat (org.springframework.web.servlet.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Spring MVC for Portlet Environments 
	(depends on spring-core, spring-beans, spring-context, spring-web)
	Define this if you use Spring MVC with a Portlet Container 
	(org.springframework.web.portlet.*)-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc-portlet</artifactId>
	<version>${org.springframework.version}</version>
</dependency>
<!-- Support for testing Spring applications with tools such as JUnit and TestNG
	This artifact is generally always defined with a 'test' scope for the 
	integration testing framework and unit testing stubs-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>${org.springframework.version}</version>
	<scope>test</scope>
</dependency>

Solution 2 - Java

Spring (nowadays) makes it easy to add Spring to a project by using just one dependency, e.g.

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>3.1.2.RELEASE</version>
</dependency> 

This will resolve to

[INFO] The following files have been resolved:
[INFO]    aopalliance:aopalliance:jar:1.0:compile
[INFO]    commons-logging:commons-logging:jar:1.1.1:compile
[INFO]    org.springframework:spring-aop:jar:3.1.2.RELEASE:compile
[INFO]    org.springframework:spring-asm:jar:3.1.2.RELEASE:compile
[INFO]    org.springframework:spring-beans:jar:3.1.2.RELEASE:compile
[INFO]    org.springframework:spring-context:jar:3.1.2.RELEASE:compile
[INFO]    org.springframework:spring-core:jar:3.1.2.RELEASE:compile
[INFO]    org.springframework:spring-expression:jar:3.1.2.RELEASE:compile

Have a look at the Spring Framework documentation page for more information.

Solution 3 - Java

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>

Solution 4 - Java

Since this questions seems to still get quite a lot of views, it might be useful to note that for Spring 4+ it's easiest to start using Spring Boot and the Spring Boot starter POMs.

Using Spring Boot there's less dependencies to manage (and thus fewer conflicts), and setting up a working, well integrated Spring Context is a whole lot easier. I highly recommend it.

Solution 5 - Java

What classes are missing? The class name itself should be a good clue to the missing module.

FYI, I know its really convenient to include the uber spring jar but this really causes issues when integrating with other projects. One of the benefits behind the dependency system is that it will resolve version conflicts among the dependencies.

If my library depends on spring-core:2.5 and you depend on my library and uber-spring:3.0, you now have 2 versions of spring on your classpath.

You can get around this with exclusions but its much easier to list the dependencies correctly and not have to worry about it.

Solution 6 - Java

You can add spring-context dependency for spring jars. You will get the following jars along with it.

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.5.RELEASE</version>
</dependency>

Spring context dependencies

if you also want web components, you can use spring-webmvc dependency.

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>5.0.5.RELEASE</version>
</dependency>

Spring webmvc dependencies

You can use whatever version of that you want. I have used 5.0.5.RELEASE here.

Solution 7 - Java

You can try this

<dependencies>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-core</artifactId>
		<version>3.1.0.RELEASE</version>
	</dependency>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>3.1.0.RELEASE</version>
	</dependency>

	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>3.1.0.RELEASE</version>
	</dependency>
</dependencies>`

Solution 8 - Java

Use a BOM to solve version issues.

> you may find that a third-party library, or another Spring project, > pulls in a transitive dependency to an older release. If you forget to > explicitly declare a direct dependency yourself, all sorts of > unexpected issues can arise. > > To overcome such problems Maven supports the concept of a "bill of > materials" (BOM) dependency.

https://docs.spring.io/spring/docs/4.3.18.RELEASE/spring-framework-reference/html/overview.html#overview-maven-bom

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-framework-bom</artifactId>
  <version>3.2.12.RELEASE</version>
  <type>pom</type>
</dependency>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNils SchmidtView Question on Stackoverflow
Solution 1 - JavaTimView Answer on Stackoverflow
Solution 2 - JavaFrVaBeView Answer on Stackoverflow
Solution 3 - JavaIgor KostenkoView Answer on Stackoverflow
Solution 4 - JavaTimView Answer on Stackoverflow
Solution 5 - JavaKevinView Answer on Stackoverflow
Solution 6 - JavaRam SharmaView Answer on Stackoverflow
Solution 7 - JavaRitesh KumarView Answer on Stackoverflow
Solution 8 - JavaPhilip RegoView Answer on Stackoverflow