2010-02-10 4 views
111

J'essaye de faire mon premier projet avec Spring 3.0 (et maven). J'ai utilisé Spring 2.5 (et versions d'amorces) dans certains projets. Néanmoins, je suis un peu confus, quels modules je dois définir en tant que dépendances dans mon fichier pom.xml. Je veux juste utiliser les fonctions du conteneur de base (beans, core, context, el).Quelles dépendances maven à inclure pour le printemps 3.0?

je l'habitude de le faire:

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

Mais maintenant, je suis un peu confus, car il n'y a pas plein module de printemps emballé pour la version 3.0 plus. J'ai essayé le suivant mais cela n'a pas fonctionné (quelques classes manquent).

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

Toute aide serait appréciée!

+0

Il fonctionne réellement comme spécifié dans le deuxième exemple de code. J'ai été confus par d'autres problèmes. Désolé pour la question inutile. Je recommande de garder la question de toute façon, car peut-être que les gens auront le même problème en passant de 2.5 à 3.0. –

Répondre

218

Il y avait un poste très agréable sur le Spring Blog de Keith Donald détaillant howto Obtain Spring 3 Aritfacts with Maven, avec des commentaires détails lorsque vous aurez besoin chacune des dépendances ...

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

Merci, je devais le chercher à nouveau, car j'ai trouvé et perdu le lien il y a quelques jours .. L'avoir ici signifie qu'il est probablement plus facile à trouver pour les gens que le Blog de printemps .. – Tim

+0

Et pour Spring 4 [envisagez de passer à Spring Boot] (http://stackoverflow.com/a/30644556/53444) – Tim

1

Quelles sont les classes manquantes? Le nom de classe lui-même devrait être un bon indice pour le module manquant.

FYI, je sais que c'est vraiment pratique d'inclure le pot de ressort uber, mais cela pose vraiment des problèmes lors de l'intégration avec d'autres projets. Un des avantages du système de dépendance est qu'il va résoudre les conflits de version entre les dépendances.

Si ma bibliothèque dépend de spring-core: 2.5 et que vous dépendez de ma bibliothèque et de uber-spring: 3.0, vous avez maintenant 2 versions de spring sur votre classpath.

Vous pouvez contourner ce problème avec des exclusions, mais il est beaucoup plus facile de lister les dépendances correctement et de ne pas avoir à vous en préoccuper.

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

printemps (aujourd'hui) fait il est facile d'ajouter Spring à un projet en utilisant une seule dépendance, par exemple

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

Cela permettra de résoudre à

[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 

Jetez un oeil à la page Spring Framework documentation pour plus d'informations.

+0

Cette approche peut être problématique si vous avez Spring Security dans le projet, en raison de la façon dont Maven dépend résolution fonctionne (plus court chemin) - consultez mon [Spring Security avec Maven] (http://www.baeldung.com/spring-security-with-maven) Article – Eugen

+1

@Eugen Bon point. Dans ce cas, il vaut mieux simplement déclarer les artefacts [spring-security artefacts] (http://www.springsource.org/spring-security#documentation) qui résolvent les artefacts "spring-core" supportés avec les versions correctes (malheureusement pas la dernière version stable). – FrVaBe

0

Vous pouvez essayer cette

<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

Comme ces questions semble avoir encore beaucoup de points de vue, il pourrait être utile de noter que pour le printemps 4+ il est plus facile de commencer à utiliser Spring Boot et Spring Boot starter POMs. En utilisant Spring Boot, il y a moins de dépendances à gérer (et donc moins de conflits), et la mise en place d'un Spring Context fonctionnel et bien intégré est beaucoup plus facile. Je le recommande fortement.

Questions connexes