Jakie zależności Mavena uwzględnić na wiosnę 3.0?

114

Próbuję wykonać swój pierwszy projekt w Spring 3.0 (i maven). Używałem Springa 2.5 (i wersji podkładu) w kilku projektach. Niemniej jednak jestem trochę zdezorientowany, jakie moduły muszę zdefiniować jako zależności w moim pom.xml. Chcę tylko użyć podstawowych funkcji kontenera (ziarna, rdzeń, kontekst, el).

Byłem do tego przyzwyczajony:

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

Ale teraz jestem trochę zdezorientowany, ponieważ nie ma już pełnego zapakowanego modułu sprężynowego dla wersji 3.0. Próbowałem wykonać następujące czynności, ale nie zadziałało (brakuje niektórych klas).

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

Każda pomoc będzie mile widziana!

Nils Schmidt
źródło
W rzeczywistości działa tak, jak określono w drugim przykładzie kodu. Zmyliły mnie inne problemy. Przepraszamy za niepotrzebne pytanie. Mimo wszystko radziłbym zachować pytanie, bo może ludzie będą mieli ten sam problem z przejściem z 2.5 na 3.0.
Nils Schmidt

Odpowiedzi:

227

Na wiosennym blogu Keith Donald pojawił się naprawdę fajny post, w którym szczegółowo opisał, jak uzyskać Spring 3 Aritfacts z Maven , wraz z komentarzami szczegółowo opisującymi, kiedy potrzebujesz każdej z zależności ...

<!-- 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
źródło
3
Dzięki, właściwie musiałem go ponownie poszukać, ponieważ znalazłem i zgubiłem link kilka dni temu .. Posiadanie go tutaj oznacza, że ​​prawdopodobnie łatwiej jest znaleźć ludziom niż wiosenny blog ..
Tim
29

Spring (obecnie) ułatwia dodanie Springa do projektu przy użyciu tylko jednej zależności, np

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

To rozwiąże

[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

Zajrzyj na stronę dokumentacji Spring Framework, aby uzyskać więcej informacji.

FrVaBe
źródło
Takie podejście może być problematyczne, jeśli masz w projekcie także Spring Security, ze względu na sposób, w jaki działa rozwiązanie zależności Maven (najkrótsza ścieżka) - sprawdź mój artykuł Spring Security with Maven
Eugen
1
@Eugen Słuszna uwaga. W tym przypadku byłoby nawet lepiej po prostu zadeklarować artefakty zabezpieczeń sprężynowych, które rozwiązują obsługiwane artefakty "sprężynowego rdzenia" z poprawnymi wersjami (niestety nie jest to najnowsza stabilna wersja).
FrVaBe
3
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
Igor Kostenko
źródło
2

Ponieważ wydaje się, że to pytanie wciąż ma dość dużo wyświetleń, warto zauważyć, że w przypadku Spring 4+ najłatwiej jest zacząć używać, Spring Boota POM-ów Spring Boot starter .

Dzięki Spring Boot jest mniej zależności do zarządzania (a tym samym mniej konfliktów), a skonfigurowanie działającego, dobrze zintegrowanego Spring Context jest o wiele łatwiejsze. Gorąco polecam.

Tim
źródło
1

Jakich klas brakuje? Sama nazwa klasy powinna być dobrą wskazówką co do brakującego modułu.

FYI, wiem, że dołączenie słoika na wiosnę Uber jest naprawdę wygodne, ale to naprawdę powoduje problemy podczas integracji z innymi projektami. Jedną z zalet systemu zależności jest to, że rozwiązuje on konflikty wersji między zależnościami.

Jeśli moja biblioteka jest zależna od spring-core: 2.5, a Ty polegasz na mojej bibliotece i uber-spring: 3.0, masz teraz dwie wersje spring na swojej ścieżce klas.

Możesz obejść ten problem za pomocą wykluczeń, ale znacznie łatwiej jest poprawnie wymienić zależności i nie musisz się tym martwić.

Kevin
źródło
1

Możesz dodać zależność kontekstową sprężyny dla słoików sprężynowych. Wraz z nim otrzymasz następujące słoiki.

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

Zależności kontekstowe sprężyny

jeśli potrzebujesz również komponentów internetowych, możesz użyć zależności spring-webmvc .

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

Zależności Spring Webmvc

Możesz użyć dowolnej wersji. Użyłem tutaj 5.0.5.RELEASE.

Ram Sharma
źródło
0

Możesz tego spróbować

<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
źródło
0

Użyj BOM, aby rozwiązać problemy z wersją.

może się okazać, że biblioteka innej firmy lub inny projekt Spring ściąga przechodnią zależność do starszej wersji. Jeśli zapomnisz jawnie zadeklarować bezpośrednią zależność samodzielnie, mogą pojawić się różnego rodzaju nieoczekiwane problemy.

Aby przezwyciężyć takie problemy, Maven popiera koncepcję zależności „listy materiałów” (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
źródło