2010-02-10 11 views
111

Sto provando a fare il mio primo progetto con Spring 3.0 (e Maven). Ho usato Spring 2.5 (e versioni di primer) in alcuni progetti. Tuttavia sono un po 'confuso, quali moduli devo definire come dipendenze nel mio pom.xml. Voglio solo utilizzare le funzioni del contenitore principale (bean, core, context, el).Quali dipendenze Maven includere per la primavera 3.0?

ero abituato a fare questo:

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

Ma ora sono un pò confuso, in quanto non v'è alcun modulo di piena primavera al sacco per la versione 3.0 più. 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!

+0

In realtà funziona come specificato nel secondo esempio di codice. Sono stato confuso da altri problemi. Ci scusiamo per la domanda inutile. Raccomanderei comunque di mantenere la domanda, perché forse le persone avranno lo stesso problema passando da 2,5 a 3,0. –

risposta

218

C'era davvero un bel post sul Spring Blog da Keith Donald dettagli howto Obtain Spring 3 Aritfacts with Maven, con i commenti in dettaglio quando avresti bisogno 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, come ho trovato e perso il link pochi giorni fa .. Averlo qui significa che è probabilmente più facile da trovare per le persone rispetto al blog di primavera .. – Tim

+0

E per Spring 4 [si consideri il passaggio a Spring Boot] (http://stackoverflow.com/a/30644556/53444) – Tim

1

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

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

Se la mia libreria dipende da spring-core: 2.5 e si dipende dalla mia libreria e da uber-spring: 3.0, ora avete 2 versioni di spring sul vostro classpath.

È possibile aggirare questo con le esclusioni ma è molto più facile elencare correttamente le dipendenze e non doversi preoccupare di ciò.

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

Primavera (al giorno d'oggi) fa è facile aggiungere Spring a un progetto usando solo una dipendenza, ad es

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

Questo risolverà per

[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 Spring Framework documentation per ulteriori informazioni.

+0

Questo approccio potrebbe essere problematico se si dispone anche di Spring Security nel progetto, a causa del modo in cui Maven dipende risoluzione funziona (percorso più breve) - controlla il mio [Spring Security con Maven] (http://www.baeldung.com/spring-security-with-maven) Articolo – Eugen

+1

@Eugen Buon punto. In questo caso sarebbe anche meglio dichiarare gli [artefatti di sicurezza della primavera] (http://www.springsource.org/spring-security#documentation) che risolvono gli artefatti "spring-core" supportati con le versioni corrette (sfortunatamente non l'ultima versione stabile). – FrVaBe

0

Si può 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>` 
2

Da questa domanda sembra avere ancora un bel po 'di punti di vista, potrebbe essere utile notare che per la primavera 4+ è più facile per iniziare a utilizzare Spring Boot e il Spring Boot starter POMs.

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

Problemi correlati