Những phụ thuộc maven nào để bao gồm cho mùa xuân 3.0?


114

Tôi đang cố gắng thực hiện dự án đầu tiên của mình với Spring 3.0 (và maven). Tôi đã sử dụng Spring 2.5 (và các phiên bản mồi) trong một số dự án. Tuy nhiên, tôi hơi bối rối, những gì mô-đun tôi phải xác định là phụ thuộc trong pom.xml của tôi. Tôi chỉ muốn sử dụng các hàm chứa lõi (bean, core, context, el).

Tôi đã được sử dụng để làm điều này:

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

Nhưng bây giờ tôi hơi bối rối, vì không có mô-đun lò xo đóng gói đầy đủ cho phiên bản 3.0 nữa. Tôi đã thử những cách sau nhưng nó không hoạt động (một số lớp bị thiếu).

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

Bất kỳ trợ giúp sẽ được đánh giá cao!


Nó thực sự hoạt động như được chỉ định trong ví dụ mã thứ hai. Tôi đã bối rối bởi một số vấn đề khác. Xin lỗi vì câu hỏi không cần thiết. Tôi khuyên bạn nên giữ nguyên câu hỏi, vì có thể mọi người sẽ gặp vấn đề tương tự khi chuyển từ 2.5 sang 3.0.
Nils Schmidt

Câu trả lời:


227

Có một bài đăng thực sự thú vị trên Blog mùa xuân từ Keith Donald trình bày chi tiết về cách có được Spring 3 Aritfacts với Maven , với các nhận xét nêu chi tiết khi nào bạn cần từng phụ thuộc ...

<!-- 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
Cảm ơn, thực sự phải nhìn cho nó một lần nữa, như tôi đã tìm thấy và bị mất liên kết một vài ngày trước .. Có nó ở đây có nghĩa là nó có thể dễ dàng tìm kiếm cho người dân hơn so với mùa xuân Blog ..
Tim

Và đối với mùa xuân 4 xem xét chuyển sang mùa xuân Boot
Tim

29

Spring (ngày nay) giúp dễ dàng thêm Spring vào dự án bằng cách chỉ sử dụng một phụ thuộc, ví dụ:

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

Điều này sẽ giải quyết

[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

Hãy xem trang tài liệu Spring Framework để biết thêm thông tin.


Phương pháp mà bạn có thể có vấn đề nếu bạn có Xuân An trong dự án là tốt, vì cách Maven công trình có độ phân giải phụ thuộc (con đường ngắn nhất) - kiểm tra của tôi an mùa xuân với Maven Điều
Eugen

1
@Eugen Điểm tốt. Trong trường hợp này, sẽ tốt hơn nếu chỉ khai báo các tạo tác bảo mật mùa xuân giải quyết các tạo tác "lõi mùa xuân" được hỗ trợ với các phiên bản chính xác (rất tiếc không phải là phiên bản ổn định mới nhất).
FrVaBe

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

2

Vì câu hỏi này dường như vẫn nhận được khá nhiều lượt xem, nên có thể hữu ích khi lưu ý rằng đối với Spring 4+, việc bắt đầu sử dụng là dễ nhất Spring BootPOM khởi động Spring Boot .

Sử dụng Spring Boot sẽ có ít phụ thuộc hơn để quản lý (và do đó ít xung đột hơn) và việc thiết lập một Spring Context hoạt động, tích hợp tốt sẽ dễ dàng hơn rất nhiều. Tôi khuyên bạn nên nó.


1

Những lớp nào còn thiếu? Bản thân tên lớp phải là một manh mối tốt cho mô-đun bị thiếu.

FYI, tôi biết việc bao gồm lọ lò xo uber rất tiện lợi nhưng điều này thực sự gây ra vấn đề khi tích hợp với các dự án khác. Một trong những lợi ích đằng sau hệ thống phụ thuộc là nó sẽ giải quyết xung đột phiên bản giữa các thành phần phụ thuộc.

Nếu thư viện của tôi phụ thuộc vào spring-core: 2.5 và bạn phụ thuộc vào thư viện của tôi và uber-spring: 3.0, bây giờ bạn có 2 phiên bản spring trên classpath của mình.

Bạn có thể giải quyết vấn đề này bằng các loại trừ nhưng việc liệt kê các phần phụ thuộc một cách chính xác sẽ dễ dàng hơn nhiều và không phải lo lắng về nó.


1

Bạn có thể thêm phụ thuộc vào ngữ cảnh mùa xuân cho các lọ mùa xuân. Bạn sẽ nhận được các lọ sau cùng với nó.

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

Phụ thuộc ngữ cảnh mùa xuân

nếu bạn cũng muốn có các thành phần web, bạn có thể sử dụng phụ thuộc spring-webmvc .

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

Spring webmvc phụ thuộc

Bạn có thể sử dụng bất kỳ phiên bản nào bạn muốn. Tôi đã sử dụng 5.0.5.RELEASE ở đây.


0

Bạn có thể thử cái này

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

0

Sử dụng BOM để giải quyết các vấn đề về phiên bản.

bạn có thể thấy rằng thư viện của bên thứ ba, hoặc một dự án Spring khác, kéo một phụ thuộc bắc cầu vào một bản phát hành cũ hơn. Nếu bạn quên khai báo một cách rõ ràng về người phụ thuộc trực tiếp, tất cả các loại vấn đề không mong muốn có thể phát sinh.

Để khắc phục những vấn đề như vậy, Maven ủng hộ khái niệm phụ thuộc "hóa đơn nguyên vật liệu" (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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.