Quais dependências do maven incluir para o Spring 3.0?

114

Estou tentando fazer meu primeiro projeto com Spring 3.0 (e maven). Tenho usado Spring 2.5 (e versões primer) em alguns projetos. No entanto, estou meio confuso, quais módulos tenho que definir como dependências no meu pom.xml. Eu só quero usar as funções principais do contêiner (beans, core, context, el).

Eu estava acostumado a fazer isso:

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

Mas agora estou meio confuso, já que não há mais um módulo do Spring completo para a versão 3.0. Tentei o seguinte, mas não funcionou (algumas aulas estão faltando).

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

Qualquer ajuda seria apreciada!

Nils Schmidt
fonte
Na verdade, ele funciona conforme especificado no segundo exemplo de código. Fiquei confuso com alguns outros problemas. Desculpe pela pergunta desnecessária. Eu recomendaria manter a pergunta de qualquer maneira, porque talvez as pessoas tenham o mesmo problema ao mudar do 2.5 para o 3.0.
Nils Schmidt de

Respostas:

227

Houve um post muito bom no Spring Blog de Keith Donald detalhando como obter o Spring 3 Aritfacts com Maven , com comentários detalhando quando você precisa de cada uma das dependências ...

<!-- 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
fonte
3
Obrigado, na verdade tive que procurá-lo novamente, pois encontrei e perdi o link há alguns dias. Tê-lo aqui significa que provavelmente é mais fácil de encontrar para as pessoas do que no Spring Blog.
Tim
E para a primavera 4 considere mudar para Spring Boot
Tim
29

Spring (hoje em dia) torna mais fácil adicionar Spring a um projeto usando apenas uma dependência, por exemplo

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

Isso vai resolver para

[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

Dê uma olhada na página de documentação do Spring Framework para mais informações.

FrVaBe
fonte
Essa abordagem pode ser problemático se você tiver Spring Security no projeto, bem como, devido à forma como obras de resolução de dependência do Maven (caminho mais curto) - confira o meu Spring Security com Maven artigo
Eugen
1
@Eugen Bom ponto. Nesse caso, seria ainda melhor apenas declarar os artefatos spring-security que resolvem os artefatos "spring-core" suportados com as versões corretas (infelizmente não a versão estável mais recente).
FrVaBe
3
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
Igor Kostenko
fonte
2

Uma vez que essas questões parecem ainda receber muitas visualizações, pode ser útil observar que para o Spring 4+ é mais fácil começar a usar Spring Boote os POMs iniciais do Spring Boot .

Usando o Spring Boot, há menos dependências para gerenciar (e, portanto, menos conflitos), e configurar um Spring Context funcional e bem integrado é muito mais fácil. Eu recomendo.

Tim
fonte
1

Que aulas faltam? O próprio nome da classe deve ser uma boa pista para o módulo ausente.

Para sua informação, eu sei que é realmente conveniente incluir o uber spring jar, mas isso realmente causa problemas ao integrar com outros projetos. Um dos benefícios por trás do sistema de dependências é que ele resolverá os conflitos de versão entre as dependências.

Se minha biblioteca depende do spring-core: 2.5 e você depende da minha biblioteca e do uber-spring: 3.0, agora você tem 2 versões do spring em seu classpath.

Você pode contornar isso com exclusões, mas é muito mais fácil listar as dependências corretamente e não precisa se preocupar com isso.

Kevin
fonte
1

Você pode adicionar dependência de contexto spring para jars spring. Você receberá os seguintes frascos junto com ele.

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

Dependências de contexto do Spring

se você também deseja componentes da web, pode usar a dependência spring-webmvc .

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

Dependências do Spring webmvc

Você pode usar qualquer versão que desejar. Eu usei o 5.0.5.RELEASE aqui.

Ram Sharma
fonte
0

Você pode tentar isso

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

Use um BOM para resolver problemas de versão.

você pode descobrir que uma biblioteca de terceiros, ou outro projeto Spring, puxa uma dependência transitiva para uma versão mais antiga. Se você se esquecer de declarar explicitamente uma dependência direta, todos os tipos de problemas inesperados podem surgir.

Para superar esses problemas, o Maven suporta o conceito de dependência de "lista de materiais" (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
fonte