Quali dipendenze maven includere per la primavera 3.0?


114

Sto provando a realizzare il mio primo progetto con Spring 3.0 (e Maven). Ho usato Spring 2.5 (e le versioni primer) in molti progetti. Tuttavia sono un po 'confuso, quali moduli devo definire come dipendenze nel mio pom.xml. Voglio solo usare le funzioni di base del contenitore (bean, core, context, el).

Ero abituato a fare questo:

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

Ma ora sono un po 'confuso, poiché non esiste più un modulo spring completo per la versione 3.0. Ho provato quanto segue ma non ha funzionato (mancano alcune classi).

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

Qualsiasi aiuto sarebbe apprezzato!


Funziona effettivamente come specificato nel secondo esempio di codice. Sono stato confuso da altri problemi. Scusa per la domanda non necessaria. Consiglierei comunque di mantenere la domanda, perché forse le persone avranno lo stesso problema passando da 2.5 a 3.0.
Nils Schmidt

Risposte:


227

C'era un post davvero carino sul blog di primavera di Keith Donald che descriveva in dettaglio come ottenere i fatti di primavera 3 con Maven , con commenti che dettagliavano quando avresti bisogno di ciascuna delle dipendenze ...

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

3
Grazie, in realtà ho dovuto cercarlo di nuovo, poiché ho trovato e perso il collegamento pochi giorni fa .. Averlo qui significa che probabilmente è più facile da trovare per le persone rispetto al Blog di primavera ..
Tim


29

Spring (al giorno d'oggi) rende facile aggiungere Spring a un progetto usando una sola dipendenza, ad es

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

Questo risolverà

[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

Dai un'occhiata alla pagina della documentazione di Spring Framework per maggiori informazioni.


Questo approccio può essere problematico se nel progetto è presente anche Spring Security, a causa del modo in cui funziona la risoluzione delle dipendenze di Maven (percorso più breve) - dai un'occhiata al mio Spring Security con l' articolo Maven
Eugen

1
@ Eugen Buon punto. In questo caso sarebbe anche meglio dichiarare gli artefatti spring-security che risolvono gli artefatti "spring-core" supportati con le versioni corrette (sfortunatamente non l'ultima versione stabile).
FrVaBe

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

2

Poiché queste domande sembrano ancora ottenere molte visualizzazioni, potrebbe essere utile notare che per Spring 4+ è più facile iniziare a utilizzare Spring Boote i POM iniziali di Spring Boot .

Utilizzando Spring Boot ci sono meno dipendenze da gestire (e quindi meno conflitti), e impostare un Spring Context funzionante e ben integrato è molto più semplice. Lo consiglio vivamente.


1

Quali classi mancano? Il nome stesso della classe dovrebbe essere un buon indizio del modulo mancante.

Cordiali saluti, so che è davvero conveniente includere il vaso di primavera uber, ma questo causa davvero problemi durante l'integrazione con altri progetti. Uno dei vantaggi dietro il sistema di dipendenze è che risolverà i conflitti di versione tra le dipendenze.

Se la mia libreria dipende da spring-core: 2.5 e tu dipendi dalla mia libreria e da uber-spring: 3.0, ora hai 2 versioni di spring sul tuo classpath.

Puoi aggirare questo problema con le esclusioni, ma è molto più facile elencare le dipendenze correttamente e non devi preoccupartene.


1

Puoi aggiungere la dipendenza dal contesto della primavera per i vasi primaverili. Insieme ad esso otterrai i seguenti barattoli.

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

Dipendenze del contesto primaverile

se vuoi anche componenti web, puoi usare la dipendenza spring-webmvc .

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

Dipendenze webmvc di primavera

Puoi usare qualsiasi versione di ciò che desideri. Ho usato 5.0.5.RELEASE qui.


0

Puoi provare questo

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

0

Utilizza una distinta componenti per risolvere i problemi di versione.

potresti scoprire che una libreria di terze parti, o un altro progetto Spring, inserisce una dipendenza transitiva da una versione precedente. Se dimentichi di dichiarare esplicitamente una dipendenza diretta da solo, possono sorgere tutti i tipi di problemi imprevisti.

Per superare tali problemi, Maven supporta il concetto di dipendenza dalla "distinta base" (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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.