Welche Maven-Abhängigkeiten sollten für Spring 3.0 berücksichtigt werden?

114

Ich versuche mein erstes Projekt mit Spring 3.0 (und Maven) zu machen. Ich habe Spring 2.5 (und Primer-Versionen) in einigen Projekten verwendet. Trotzdem bin ich etwas verwirrt, welche Module ich als Abhängigkeiten in meiner pom.xml definieren muss. Ich möchte nur die Kerncontainerfunktionen (Beans, Core, Kontext, El) verwenden.

Ich war daran gewöhnt:

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

Aber jetzt bin ich etwas verwirrt, da es für Version 3.0 kein voll gepacktes Federmodul mehr gibt. Ich habe folgendes versucht, aber es hat nicht funktioniert (einige Klassen fehlen).

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

Jede Hilfe wäre dankbar!

Nils Schmidt
quelle
Es funktioniert tatsächlich wie im zweiten Codebeispiel angegeben. Ich wurde durch einige andere Probleme verwirrt. Entschuldigung für die unnötige Frage. Ich würde empfehlen, die Frage trotzdem beizubehalten, da die Leute möglicherweise das gleiche Problem haben, von 2,5 auf 3,0 zu wechseln.
Nils Schmidt

Antworten:

227

Es gab einen wirklich schönen Beitrag auf dem Spring Blog von Keith Donald, in dem ausführlich beschrieben wurde, wie man Spring 3-Artefakte mit Maven erhält , mit Kommentaren, in denen angegeben wird, wann Sie die einzelnen Abhängigkeiten benötigen ...

<!-- 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
quelle
3
Vielen Dank, musste tatsächlich wieder danach suchen, da ich den Link vor ein paar Tagen gefunden und verloren habe. Wenn ich ihn hier habe, ist es wahrscheinlich einfacher für Leute zu finden als im Frühlingsblog.
Tim
Und für Spring 4 sollten Sie zu Spring Boot wechseln
Tim
29

Spring (heutzutage) macht es einfach, Spring zu einem Projekt hinzuzufügen, indem nur eine Abhängigkeit verwendet wird, z

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

Dies wird zu lösen

[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

Weitere Informationen finden Sie auf der Spring Framework-Dokumentationsseite .

FrVaBe
quelle
Dieser Ansatz kann problematisch sein, wenn Sie Spring Security auch im Projekt haben, da die Maven-Abhängigkeitsauflösung funktioniert (kürzester Weg) -
Eugen
1
@ Eugen Guter Punkt. In diesem Fall wäre es noch besser, nur die erklären feder Sicherheit Artefakte welcher Entschlossenheit den unterstützten „Federkern“ Artefakte mit den richtigen Versionen (unfortunaltly nicht die letzte stabile Version).
FrVaBe
3
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
Igor Kostenko
quelle
2

Da diese Fragen immer noch ziemlich viele Ansichten zu haben scheinen, kann es nützlich sein zu beachten, dass es für Spring 4+ am einfachsten ist, mit Spring Bootden Spring Boot-Starter-POMs zu beginnen .

Mit Spring Boot müssen weniger Abhängigkeiten verwaltet werden (und damit weniger Konflikte), und das Einrichten eines funktionierenden, gut integrierten Spring Context ist viel einfacher. Ich empfehle es sehr.

Tim
quelle
1

Welche Klassen fehlen? Der Klassenname selbst sollte ein guter Hinweis auf das fehlende Modul sein.

Zu Ihrer Information, ich weiß, dass es sehr praktisch ist, das Uber Spring Jar einzuschließen, aber dies verursacht wirklich Probleme bei der Integration in andere Projekte. Einer der Vorteile des Abhängigkeitssystems besteht darin, dass Versionskonflikte zwischen den Abhängigkeiten gelöst werden.

Wenn meine Bibliothek von Spring-Core abhängt: 2.5 und Sie von meiner Bibliothek und Uber-Spring: 3.0 abhängen, haben Sie jetzt 2 Versionen von Spring auf Ihrem Klassenpfad.

Sie können dies mit Ausschlüssen umgehen, aber es ist viel einfacher, die Abhängigkeiten korrekt aufzulisten, ohne sich darum kümmern zu müssen.

Kevin
quelle
1

Sie können die Frühlingskontextabhängigkeit für Frühlingsgläser hinzufügen . Sie erhalten die folgenden Gläser dazu.

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

Frühlingskontextabhängigkeiten

Wenn Sie auch Webkomponenten möchten, können Sie die spring-webmvc- Abhängigkeit verwenden.

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

Spring webmvc-Abhängigkeiten

Sie können jede gewünschte Version davon verwenden. Ich habe hier 5.0.5.RELEASE verwendet.

Ram Sharma
quelle
0

Sie können dies versuchen

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

Verwenden Sie eine Stückliste, um Versionsprobleme zu lösen.

Möglicherweise stellen Sie fest, dass eine Bibliothek eines Drittanbieters oder ein anderes Spring-Projekt eine transitive Abhängigkeit von einer älteren Version aufweist. Wenn Sie vergessen, eine direkte Abhängigkeit explizit selbst zu deklarieren, können alle möglichen unerwarteten Probleme auftreten.

Um solche Probleme zu lösen, unterstützt Maven das Konzept einer Stücklistenabhängigkeit.

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
quelle