Quelles dépendances Maven inclure pour Spring 3.0?

114

J'essaye de faire mon premier projet avec Spring 3.0 (et maven). J'utilise Spring 2.5 (et les versions préliminaires) dans de nombreux projets. Néanmoins, je suis un peu confus, quels modules je dois définir comme dépendances dans mon pom.xml. Je veux juste utiliser les fonctions principales du conteneur (beans, core, context, el).

J'avais l'habitude de faire ceci:

<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 plus de module de printemps complet pour la version 3.0. J'ai essayé ce qui suit mais cela n'a pas fonctionné (certaines 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!

Nils Schmidt
la source
Cela fonctionne en fait 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 recommanderais quand même de garder la question, car peut-être que les gens auront le même problème pour passer de 2,5 à 3,0.
Nils Schmidt

Réponses:

227

Il y avait un très bon article sur le blog de printemps de Keith Donald détaillant comment obtenir des artefacts de printemps 3 avec Maven , avec des commentaires détaillant quand vous auriez besoin de 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>
Tim
la source
3
Merci, j'ai dû 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
Et pour le printemps 4, envisagez de passer à Spring Boot
Tim
29

Spring (de nos jours) facilite l'ajout de 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 résoudra à

[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

Consultez la page de documentation de Spring Framework pour plus d'informations.

FrVaBe
la source
Cette approche peut être problématique si vous avez Spring Security dans le projet et, à cause de la façon dont fonctionne Maven résolution de dépendance (chemin le plus court) - vérifier ma sécurité printemps avec Maven article
Eugen
1
@Eugen Bon point. Dans ce cas, il serait même préférable de simplement déclarer les artefacts de sécurité de ressort qui résolvent les artefacts "spring-core" pris en charge avec les versions correctes (malheureusement pas la dernière version stable).
FrVaBe
3
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
Igor Kostenko
la source
2

Étant donné que ces questions semblent toujours susciter beaucoup de vues, il peut être utile de noter que pour Spring 4+, il est plus facile de commencer à utiliser Spring Bootet les POM de démarrage Spring Boot .

En utilisant Spring Boot, il y a moins de dépendances à gérer (et donc moins de conflits), et la configuration d'un contexte Spring fonctionnel et bien intégré est beaucoup plus facile. Je le recommande fortement.

Tim
la source
1

Quelles classes manquent? Le nom de la classe lui-même devrait être un bon indice du module manquant.

Pour info, je sais que c'est vraiment pratique d'inclure le pot de printemps uber, mais cela pose vraiment des problèmes lors de l'intégration avec d'autres projets. L'un des avantages du système de dépendances est qu'il résoudra 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 cela avec des exclusions, mais il est beaucoup plus facile de répertorier correctement les dépendances et de ne pas vous en préoccuper.

Kevin
la source
1

Vous pouvez ajouter une dépendance de contexte de printemps pour les pots de printemps. Vous obtiendrez les pots suivants avec lui.

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

Dépendances de contexte Spring

si vous souhaitez également des composants Web, vous pouvez utiliser la dépendance spring-webmvc .

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

Dépendances de Spring Webmvc

Vous pouvez utiliser la version de votre choix. J'ai utilisé 5.0.5.RELEASE ici.

Ram Sharma
la source
0

Vous pouvez essayer ceci

<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
la source
0

Utilisez une nomenclature pour résoudre les problèmes de version.

vous pouvez constater qu'une bibliothèque tierce, ou un autre projet Spring, extrait une dépendance transitive vers une version plus ancienne. Si vous oubliez de déclarer explicitement une dépendance directe vous-même, toutes sortes de problèmes inattendus peuvent survenir.

Pour surmonter ces problèmes, Maven prend en charge le concept de dépendance de «nomenclature» (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
la source