¿Qué dependencias de maven incluir para Spring 3.0?

114

Estoy tratando de hacer mi primer proyecto con Spring 3.0 (y maven). He estado usando Spring 2.5 (y versiones iniciales) en bastantes proyectos. Sin embargo, estoy un poco confundido, qué módulos tengo que definir como dependencias en mi pom.xml. Solo quiero usar las funciones básicas del contenedor (beans, core, context, el).

Estaba acostumbrado a hacer esto:

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

Pero ahora estoy un poco confundido, ya que ya no hay un módulo de primavera completo para la versión 3.0. Intenté lo siguiente pero no funcionó (faltan algunas clases).

    <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>

¡Cualquier ayuda sería apreciada!

Nils Schmidt
fuente
En realidad, funciona como se especifica en el segundo ejemplo de código. Me confundieron algunos otros problemas. Perdón por la pregunta innecesaria. Recomendaría mantener la pregunta de todos modos, porque tal vez las personas tengan el mismo problema al cambiar de 2.5 a 3.0.
Nils Schmidt

Respuestas:

227

Hubo una publicación realmente agradable en Spring Blog de Keith Donald que detalla cómo obtener Spring 3 Aritfacts con Maven , con comentarios que detallan cuándo necesitaría cada una de las dependencias ...

<!-- 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>
Tim
fuente
3
Gracias, en realidad tuve que buscarlo de nuevo, ya que encontré y perdí el enlace hace unos días. Tenerlo aquí significa que probablemente sea más fácil de encontrar para la gente que el Blog de Spring ..
Tim
Y para Spring 4 considere cambiar a Spring Boot
Tim
29

Spring (hoy en día) facilita agregar Spring a un proyecto usando solo una dependencia, por ejemplo

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

Esto se resolverá

[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

Eche un vistazo a la página de documentación de Spring Framework para obtener más información.

FrVaBe
fuente
Este enfoque puede ser problemático si usted tiene la primavera de Seguridad en el proyecto, así, debido a la forma en que funciona la resolución de dependencias de Maven (camino más corto) - echa un vistazo a mi Spring Security con Maven artículo
Eugen
1
@Eugen Buen punto. En este caso, sería incluso mejor declarar los artefactos de seguridad de resorte que resuelven los artefactos de "núcleo de resorte" compatibles con las versiones correctas (desafortunadamente no es la última versión estable).
Viernes
3
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
Igor Kostenko
fuente
2

Dado que esta pregunta parece seguir recibiendo muchas visitas, puede ser útil tener en cuenta que para Spring 4+ es más fácil comenzar a usar Spring Booty los POM de inicio de Spring Boot .

Al usar Spring Boot, hay menos dependencias que administrar (y, por lo tanto, menos conflictos), y configurar un Spring Context que funcione y esté bien integrado es mucho más fácil. Lo recomiendo altamente.

Tim
fuente
1

¿Qué clases faltan? El nombre de la clase en sí debería ser una buena pista del módulo que falta.

Para su información, sé que es realmente conveniente incluir el tarro de primavera uber, pero esto realmente causa problemas cuando se integra con otros proyectos. Uno de los beneficios del sistema de dependencia es que resolverá los conflictos de versiones entre las dependencias.

Si mi biblioteca depende de spring-core: 2.5 y usted depende de mi biblioteca y uber-spring: 3.0, ahora tiene 2 versiones de spring en su classpath.

Puede solucionar esto con exclusiones, pero es mucho más fácil enumerar las dependencias correctamente y no tener que preocuparse por ello.

Kevin
fuente
1

Puede agregar dependencia de contexto de primavera para los frascos de primavera. Obtendrá los siguientes frascos junto con él.

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

Dependencias de contexto de primavera

si también desea componentes web, puede usar la dependencia spring-webmvc .

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

Dependencias de Spring webmvc

Puede usar la versión que desee. He usado 5.0.5.RELEASE aquí.

Ram Sharma
fuente
0

Puedes probar esto

<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>`
Ritesh Kumar
fuente
0

Utilice una lista de materiales para resolver problemas de versiones.

puede encontrar que una biblioteca de terceros u otro proyecto de Spring incorpore una dependencia transitiva a una versión anterior. Si olvida declarar explícitamente una dependencia directa usted mismo, pueden surgir todo tipo de problemas inesperados.

Para superar estos problemas, Maven apoya el concepto de dependencia de una "lista de materiales" (BOM).

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>
Philip Rego
fuente