Dependensi maven mana yang harus disertakan untuk spring 3.0?


114

Saya mencoba melakukan proyek pertama saya dengan Spring 3.0 (dan maven). Saya telah menggunakan Spring 2.5 (dan versi primer) di beberapa proyek. Namun saya agak bingung, modul apa yang harus saya definisikan sebagai dependensi di pom.xml saya. Saya hanya ingin menggunakan fungsi wadah inti (kacang, inti, konteks, el).

Saya terbiasa melakukan ini:

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

Tapi sekarang saya agak bingung, karena tidak ada modul pegas yang dikemas penuh untuk versi 3.0 lagi. Saya mencoba yang berikut ini tetapi tidak berhasil (beberapa kelas hilang).

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

Bantuan apa pun akan dihargai!


Ini benar-benar berfungsi seperti yang ditentukan dalam contoh kode kedua. Saya bingung dengan beberapa masalah lain. Maaf atas pertanyaan yang tidak perlu. Saya akan merekomendasikan untuk menyimpan pertanyaan itu, karena mungkin orang akan memiliki masalah yang sama saat beralih dari 2.5 ke 3.0.
Nils Schmidt

Jawaban:


227

Ada posting yang sangat bagus di Blog Musim Semi dari Keith Donald yang merinci cara Mendapatkan Aritfacts Spring 3 dengan Maven , dengan komentar yang merinci kapan Anda membutuhkan masing-masing dependensi ...

<!-- 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
Terima kasih, sebenarnya harus mencarinya lagi, karena saya menemukan & kehilangan tautan beberapa hari yang lalu .. Memiliki ini di sini berarti mungkin lebih mudah untuk menemukan orang-orang daripada Blog Musim Semi ..
Tim


29

Spring (sekarang) memudahkan untuk menambahkan Spring ke proyek hanya dengan menggunakan satu dependensi, mis

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

Ini akan menyelesaikan menjadi

[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

Lihat halaman dokumentasi Spring Framework untuk informasi lebih lanjut.


Pendekatan itu mungkin bermasalah jika Anda juga memiliki Keamanan Musim Semi dalam proyek, karena cara kerja resolusi ketergantungan Maven (jalur terpendek) - lihat Keamanan Musim Semi saya dengan Artikel Maven
Eugen

1
@Poin yang bagus. Dalam hal ini akan lebih baik jika hanya mendeklarasikan artefak keamanan pegas yang menyelesaikan artefak "inti pegas" yang didukung dengan versi yang benar (sayangnya bukan versi stabil terbaru).
FrVaBe

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

2

Karena pertanyaan ini tampaknya masih mendapatkan cukup banyak pandangan, mungkin berguna untuk dicatat bahwa untuk Spring 4+ paling mudah untuk mulai menggunakan Spring Bootdan POM starter Spring Boot .

Menggunakan Spring Boot ada lebih sedikit dependensi untuk dikelola (dan dengan demikian lebih sedikit konflik), dan menyiapkan Spring Context yang berfungsi dan terintegrasi dengan baik jauh lebih mudah. Saya sangat merekomendasikannya.


1

Kelas apa yang hilang? Nama kelas itu sendiri harus menjadi petunjuk yang baik untuk modul yang hilang.

FYI, saya tahu sangat nyaman untuk memasukkan uber spring jar tetapi ini benar-benar menyebabkan masalah saat mengintegrasikan dengan proyek lain. Salah satu manfaat di balik sistem ketergantungan ini adalah akan menyelesaikan konflik versi di antara ketergantungan.

Jika perpustakaan saya bergantung pada spring-core: 2.5 dan Anda bergantung pada library saya dan uber-spring: 3.0, Anda sekarang memiliki 2 versi spring di classpath Anda.

Anda dapat menyiasatinya dengan pengecualian tetapi jauh lebih mudah untuk membuat daftar dependensi dengan benar dan tidak perlu mengkhawatirkannya.


1

Anda dapat menambahkan ketergantungan konteks pegas untuk stoples pegas. Anda akan mendapatkan stoples berikut bersamanya.

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

Ketergantungan konteks pegas

jika Anda juga menginginkan komponen web, Anda dapat menggunakan dependensi spring-webmvc .

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

Dependensi webmvc musim semi

Anda dapat menggunakan versi apa pun yang Anda inginkan. Saya telah menggunakan 5.0.5.RELEASE di sini.


0

Anda bisa mencobanya

<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

Gunakan BOM untuk memecahkan masalah versi.

Anda mungkin menemukan bahwa pustaka pihak ketiga, atau proyek Spring lainnya, menarik ketergantungan transitif ke rilis yang lebih lama. Jika Anda lupa untuk mendeklarasikan sendiri dependensi langsung secara eksplisit, semua jenis masalah yang tidak terduga dapat muncul.

Untuk mengatasi masalah tersebut Maven mendukung konsep ketergantungan "bill of material" (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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.