Які залежності від Maven включити для весни 3.0?


114

Я намагаюся зробити свій перший проект з Spring 3.0 (і maven). Я використовую Spring 2.5 (та ґрунтовні версії) у багатьох проектах. Тим не менш, я ніби не збентежений, які модулі я повинен визначати як залежності в моєму pom.xml. Я просто хочу використовувати основні функції контейнера (боби, ядро, контекст, ел).

Я звик робити це:

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

Але зараз я трохи розгублений, оскільки вже немає повного запакованого модуля весни для версії 3.0. Я спробував наступне, але це не спрацювало (деякі класи відсутні).

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

Будь-яка допомога буде вдячна!


Він фактично працює, як зазначено у другому прикладі коду. Я заплутався в деяких інших питаннях. Вибачте за непотрібне запитання. Я б рекомендував все-таки тримати це питання, тому що, можливо, у людей буде така ж проблема з переходом від 2,5 до 3,0.
Нілс Шмідт

Відповіді:


227

У весняному блозі від Кіта Дональда був дійсно приємний пост з Кітом Дональдом, в якому детально описувались як отримати «Аріфакти весни 3» з Мейвен , з коментарями, в яких детально описується, коли вам знадобиться кожна із залежностей ...

<!-- 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
Дякую, насправді довелося шукати його ще раз, як я знайшов та втратив посилання кілька днів тому. Маючи це тут означає, що для людей, мабуть, простіше знайти, ніж весняний блог ..
Тім


29

Spring (нині) дозволяє легко додати Spring до проекту, використовуючи лише одну залежність, наприклад

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

Це вирішиться для

[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

Перегляньте сторінку документації Spring Framework для отримання додаткової інформації.


Такий підхід може виявитися проблематичним , якщо у вас є Spring Security в проекті , а також, з - за шляху роботи залежності не будуть задоволені в Maven (найкоротший шлях) - перевірити мою Spring Security з Maven статті
Eugen

1
@Eugen Добре. У цьому випадку було б навіть краще лише оголосити артефакти безпеки джерела, які вирішують підтримувані артефакти "весняного ядра" з правильними версіями (на жаль, це не остання стабільна версія).
FrVaBe


2

Оскільки ці питання, як видається, все ще отримують досить багато переглядів, може бути корисним зауважити, що для Spring 4+ найпростіше почати використовувати Spring Bootі POM для початкової програми Spring Boot. .

Використання Spring Boot менше залежностей для управління (і, таким чином, менше конфліктів), а налаштування робочого, добре інтегрованого Spring Context набагато простіше. Я дуже рекомендую його.


1

Які заняття відсутні? Ім'я класу саме по собі має бути гарною підказкою для відсутнього модуля.

FYI, я знаю, що дуже зручно включати в себе джерельну банку Uber, але це справді викликає проблеми при інтеграції з іншими проектами. Однією з переваг системи залежності є те, що вона вирішує конфліктність версій між залежностями.

Якщо моя бібліотека залежить від spring-core: 2.5, а ви залежите від моєї бібліотеки та uber-spring: 3.0, тепер у вас на класі є дві версії весни.

Ви можете подолати це за допомогою виключень, але набагато простіше перелічити залежності правильно і не потрібно про це турбуватися.


1

Ви можете додати залежність весни від контексту для весняних банок. Ви отримаєте наступні банки разом з ним.

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

Залежність від весняного контексту

якщо ви також хочете веб-компонентів, ви можете використовувати залежність spring-webmvc .

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

Весняні залежності webmvc

Ви можете використовувати будь-яку версію, яку хочете. Я тут використав 5.0.5.РЕЛІЗА.


0

Ви можете спробувати це

<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

Використовуйте BOM для вирішення проблем з версією.

Ви можете виявити, що стороння бібліотека чи інший проект Spring спричиняє перехідну залежність до старого випуску. Якщо ви забудете прямо заявити про пряму залежність, можуть виникнути всілякі несподівані проблеми.

Для подолання подібних проблем Мейвен підтримує концепцію залежності "законопроекту про матеріали" (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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.