整个 org.springframework 的 Maven 依赖项

Posted

技术标签:

【中文标题】整个 org.springframework 的 Maven 依赖项【英文标题】:Maven dependency for whole org.springframework 【发布时间】:2011-09-17 21:52:35 【问题描述】:

如何为所有org.springframework设置Maven依赖?

我的意思是,如何在几行中做到这一点,而不是为每个模块提供依赖关系,例如:

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

等等。

谢谢你的帮助

【问题讨论】:

不知道有没有 我删除了实体框架标签,因为它是 MS 技术 - .NET 框架的一部分,与此问题无关。 找不到单独的“框架”词用于标记 'framework' 不会真的是一个有用的标签恕我直言。 Which maven dependencies to include for spring 3.0?的可能重复 【参考方案1】:

Maven 依赖项中没有任何通配符,也没有任何工件可以收集所有 Spring 模块。您的项目是否真的使用所有 Spring 模块?

【讨论】:

【参考方案2】:

使用包装pom 创建模块并在其中列出所有 Spring 依赖项。称它为SpringDependencies

然后在你的每个模块中,依赖SpringDependencies 模块。这将传递所有 Spring 依赖项。

【讨论】:

这也可以让你找出你真正需要哪些模块。批处理呢?网络流量?安全吗?【参考方案3】:

在 Spring 2.x 中有这样一个一体化模块,但是它在 Spring 3.x 中发生的模块重构中未能幸免。所以,答案是“不”。

【讨论】:

【参考方案4】:

没有办法,也不应该有。你应该只使用你真正需要的罐子,不需要 all spring 罐子。对于 2.x,曾经有一个 spring.jar,但在我见过的每个项目中,它都会导致版本冲突问题。

如果您正在使用 Spring 的任何子项目,请注意有时它们仍然会使用 Spring 2.5(例如 Spring Batch,我认为 Spring Web Flow 也是如此),在这种情况下,您应该在 pom.xml 中使用 exclusions 标签。 xml。

第一次组装它不是最方便的,但你可以在其他项目中重复使用它。

【讨论】:

【参考方案5】:

正如其他答案中所述,您只想使用您实际需要的东西,例如如果你需要 Spring Web 框架,那么就得到它。但是,您可以通过进行一些依赖分析并仅指定所需依赖的***别,大大简化和减少 pom.xml 中列出的依赖集。

例如,假设您有以下依赖项(请注意,我使用的是 Spring EBR 存储库的工件 ID,而不是 Maven Central;请参阅 this article for more info on the difference):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>org.springframework.context</artifactId>
    <version>$org.springframework-version</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>org.springframework.web.servlet</artifactId>
    <version>$org.springframework-version</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>org.springframework.transaction</artifactId>
    <version>$org.springframework-version</version>
</dependency>

不过,事实上,Spring Web 的东西实际上已经依赖于上下文库,所以你可以删除上下文引用:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>org.springframework.web.servlet</artifactId>
    <version>$org.springframework-version</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>org.springframework.transaction</artifactId>
    <version>$org.springframework-version</version>
</dependency>

这将为您提供上下文库而无需专门引用它,因为它是由 Web 库中的依赖项隐式引入的。

如果你的 IDE 中有 IntelliJ 或 m2eclipse 或类似的东西,你可以在 IDE 中直接显示这些依赖关系,或者通过依赖层次结构显示,甚至在依赖关系图中,这基本上是一个 UML 图表。

对于独立的 Maven,我认为您只需这样做:

mvn dependencies:list

More on the dependencies plugin is on the plugin site.

这种方法使您的依赖项非常明确,并且您的应用程序占用空间小得多,这基本上是其他人都在警告的,但可以减少您必须在 pom.xml 中列出的依赖项数量,这就是我认为的'正在尝试解决。

【讨论】:

谢谢你,我做了这样的方式使用的库,我真的需要。问题在于 spring-web 依赖。【参考方案6】:

你可以这样做

<properties>
    <org.springframework.version>3.0.5.RELEASE</org.springframework.version>
</properties>

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

【讨论】:

【参考方案7】:

此答案针对较新的版本 4.X.X

如果您想更有效地处理依赖版本,请在 &lt;dependencies&gt;&lt;/dependencies&gt; 标记之前使用此代码。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.2.2.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

使用BOM的好处是你不再需要指定依赖的版本。所以你的依赖应该是这样的:

<dependencies>
    <!-- Spring framework -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
</dependencies>

【讨论】:

哇真的很喜欢这个解决方案。刚改了版本,又重新下载了新版本的jars【参考方案8】:

Spring-context 在内部解析其他依赖项。请在依赖树下方找到。

[INFO] com.example:springpractice:jar:1.0-SNAPSHOT
[INFO] \- org.springframework:spring-context:jar:4.3.7.RELEASE:compile
[INFO]    +- org.springframework:spring-aop:jar:4.3.7.RELEASE:compile
[INFO]    +- org.springframework:spring-beans:jar:4.3.7.RELEASE:compile
[INFO]    +- org.springframework:spring-core:jar:4.3.7.RELEASE:compile
[INFO]    |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO]    \- org.springframework:spring-expression:jar:4.3.7.RELEASE:compile

【讨论】:

以上是关于整个 org.springframework 的 Maven 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

maven引用冲突解决

maven引用冲突解决

异常:org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.security.filterC

org/springframework/core/NativeDetector java.lang.NoClassDefFoundError: org/springframework/core/Nat

Spring security-org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.sec

ClassCastException: org.springframework.orm.jpa.EntityManagerHolder 不能转换为 org.springframework.orm.hi