Какие зависимости maven включить в Spring 3.0?

114

Я пытаюсь сделать свой первый проект с помощью Spring 3.0 (и maven). Я использовал Spring 2.5 (и версии для начинающих) в некоторых проектах. Тем не менее, я немного сбит с толку, какие модули я должен определить как зависимости в моем pom.xml. Я просто хочу использовать основные функции контейнера (beans, core, context, el).

Я привык так делать:

<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

В Spring блоге был действительно хороший пост от Кита Дональда, в котором подробно рассказывалось, как получить артефакты Spring 3 с помощью Maven , с подробными комментариями, когда вам понадобится каждая из зависимостей ...

<!-- 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 для получения дополнительной информации.

FrVaBe
источник
Этот подход может быть проблематичным, если у вас также есть Spring Security в проекте из-за того, как работает разрешение зависимостей Maven (кратчайший путь) - ознакомьтесь с моей статьей Spring Security со статьей Maven
Евгений
1
@Eugen Хорошее замечание. В этом случае было бы даже лучше просто объявить артефакты пружинной безопасности, которые разрешают поддерживаемые артефакты «пружинного ядра» правильными версиями (к сожалению, не последней стабильной версией).
FrVaBe 08
3
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
Игорь Костенко
источник
2

Поскольку эти вопросы, похоже, по-прежнему получают довольно много просмотров, было бы полезно отметить, что для Spring 4+ проще всего начать использовать Spring Bootи POM-стартеры Spring Boot .

Используя Spring Boot, меньше зависимостей для управления (и, следовательно, меньше конфликтов), а настроить рабочий, хорошо интегрированный Spring Context намного проще. Я очень рекомендую это.

Тим
источник
1

Какие классы отсутствуют? Само название класса должно указывать на отсутствующий модуль.

К вашему сведению, я знаю, что очень удобно включать uber spring jar, но это действительно вызывает проблемы при интеграции с другими проектами. Одним из преимуществ системы зависимостей является то, что она разрешает конфликты версий между зависимостями.

Если моя библиотека зависит от spring-core: 2.5, а вы зависите от моей библиотеки и uber-spring: 3.0, теперь у вас есть 2 версии spring на вашем пути к классам.

Вы можете обойти это с помощью исключений, но гораздо проще правильно перечислить зависимости и не беспокоиться об этом.

Kevin
источник
1

Вы можете добавить зависимость Spring -context для Spring jar-файлов. Вместе с ним вы получите следующие банки.

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

Зависимости контекста Spring

если вам также нужны веб-компоненты, вы можете использовать зависимость spring-webmvc .

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

Зависимости Spring webmvc

Вы можете использовать любую версию, которую хотите. Я использовал 5.0.5.RELEASE здесь.

Рам Шарма
источник
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

Используйте спецификацию для решения проблем с версиями.

вы можете обнаружить, что сторонняя библиотека или другой проект Spring использует транзитивную зависимость от более ранней версии. Если вы забудете явно объявить прямую зависимость сами, могут возникнуть всевозможные неожиданные проблемы.

Чтобы преодолеть такие проблемы, Maven поддерживает концепцию зависимости «спецификация материалов» (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>
Филип Рего
источник