1.简介
在本文中,我们将演示如何针对非常特定的用例对Spring使用Maven依赖项。 我们使用的所有库的最新版本都可以在Maven Central上找到。
对于一个有效的构建周期而言,了解Maven依赖项的工作方式以及如何对其进行管理非常重要,并且对于在我们的项目中使用的各种库之间有关哪些版本匹配的清晰概念也很重要。 这是由于我们经常在多个项目中重复一组依赖项的原因。 当我们不明白为什么要使用特定的库版本时,我们应该犯错误。 让我们了解不同的Spring Framework依赖关系之间的关系。
2.项目设置
我们将使用许多Maven原型之一为我们的示例创建一个示例项目。 要创建项目,请在将用作工作空间的目录中执行以下命令:
创建样本项目
mvn archetype:generate -DgroupId=com.javacodegeeks.example -DartifactId=JCG-SpringMaven-Example -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
如果您是第一次运行maven,则完成生成命令将花费几秒钟,因为maven必须下载所有必需的插件和工件才能完成生成任务。
请注意,现在,您将在所选目录中拥有一个与artifactId同名的新目录。 现在,随时在您喜欢的IDE中打开项目。 另外, 仅当我们添加适当的Spring依赖项时,才需要该项目来演示各种依赖项树 。
最后,我们使用一个简单的maven命令来代替使用IDE来创建该项目。 这有助于我们使项目设置和初始化不受您可能使用的任何特定IDE的影响。
3. Maven的Spring依赖
由于Spring Framework具有高度模块化的性质,因此添加一个依赖关系不会对另一个依赖关系产生要求。 例如,Spring Context依赖不需要任何Spring MVC依赖或Spring数据库。 因此,我们将在各自独立的部分中介绍每个依赖项。
要添加Spring Context支持,这里是需要的依赖项:
Spring语境
<properties><org.springframework.version>5.0.4.RELEASE</org.springframework.version>
</properties>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework.version}</version><scope>runtime</scope>
</dependency>
请注意,我们使用了发布此文章时发布的最新可用Spring版本。 同样,可以在Maven Central上找到我们使用的所有库的最新版本。
要了解添加特定依赖项时添加到项目中的所有依赖项,我们可以运行一个简单的Maven命令,该命令使我们能够查看项目的完整依赖项树。 这是我们可以用来实现的Maven命令:
检查依赖树
mvn dependency:tree
当我们运行此命令时,它将向我们显示以下依赖关系树:
spring-context
库将实际的Spring Injection Container引入了项目,并需要更多的JAR,例如spring-aop
, spring-beans
, spring-core
, spring-expression
和spring-jcl
。 当我们运行上面的命令时,在向我们展示依赖树之前,maven首先再次下载了JAR,以确认是否已更改。
请注意,如果其中一个依赖项需要另一个依赖项才能运行,它也会被下载,并在上面的依赖关系树中显示为该树的子分支。 当某个依赖项将另一个依赖项带入构建系统的依赖项池中时,将清除间接依赖项的子分支表示方法。
最后,我们在此处添加的spring-context
依赖项是runtime范围 。 这是因为仅在运行时才需要此JAR,以仅提供与Spring相关的类,并且不直接在项目中使用,至少不用于简单项目。
4. Spring Persistence Maven依赖关系
现在,让我们看一下Spring Persistence实现所需的核心依赖项:
Spring持久性
<dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${org.springframework.version}</version>
</dependency>
当我们查看此库的依赖关系树时,我们会发现JDBC和Transaction支持也包含在此依赖关系中:
5. Spring MVC Maven依赖关系
Spring MVC Maven依赖关系是您开始使用Spring处理Web项目时将使用的主要依赖关系。 这是在项目中设置Spring MVC的maven依赖项:
SpringMVC
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework.version}</version>
</dependency>
这是Spring Framework Maven依赖项家族中最常用的依赖项之一。 现在让我们看一下spring-web
和spring-webmvc
库的依赖关系树:
spring-web
库包含Servlet Environment的最常用的Web实用程序。 第二个库spring-webmvc
为Servlet环境提供了MVC支持 。
6.通过Maven提供测试支持
测试始终是项目不可或缺的一部分。 在Spring中,我们对库也有依赖性,我们也可以测试我们的应用程序。 其依赖项定义为:
弹簧测试
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${org.springframework.version}</version>
</dependency>
让我们看一下所有库及其依赖树所包含的内容:
即使这就是我们现在需要的所有测试依赖项,我们也会在这里查看Spring Framework中使用的两个最常用的测试库JUnit和Mockito 。
7. Spring Security Maven依赖关系
在Spring Security with Maven课程中详细讨论了与Spring Security支持相关的Maven依赖关系。
8.在Maven中使用JUnit
要在基于Spring的项目中添加JUnit依赖项,只需添加一个具有test
范围的简单依赖项:
JUnit的
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>
让我们看一下所有库及其依赖树所包含的内容:
JUnit也带来了Hamcrest库。 要在JUnit中使用Hamcrest匹配器,我们使用assertThat
语句后跟一个或多个匹配器。 要了解Hamcrest中可用的匹配器,请阅读Hamcrest匹配器教程 。
9.在Maven中使用Mockito
Mockito是使用最广泛的Java测试依赖项之一,它还可用于模拟对象及其行为:
莫基托
<dependency><groupId>org.mockito</groupId><artifactId>mockito-all</artifactId><version>1.10.19</version><scope>test</scope>
</dependency>
让我们看一下所有库及其依赖树所包含的内容:
10.项目:Hello World
正如对Spring MVC的简单演示一样,我们将展示如何使用Spring MVC 5制作一个简单的控制器。为此,我们使用了在Spring MVC部分中提到的依赖项以及一些Servlet容器依赖项。 这是我们在项目中使用的所有依赖项的列表:
pom.xml
<dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${org.springframework.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework.version}</version>
</dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope>
</dependency>
<dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope>
</dependency>
<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
要在项目中配置前端Controller,我们将对AbstractAnnotationConfigDispatcherServletInitializer
类进行子类化:
AppConfig.java
package com.javacodegeeks.example.config;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;public class AppConfig extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class<?>[] getRootConfigClasses() {return new Class[] { RootConfig.class };}protected Class<?>[] getServletConfigClasses() {return new Class[] { WebMvcConfig.class };}protected String[] getServletMappings() {return new String[] { "/" };}
}
现在,我们需要创建一个Root配置类,该类将是空的,因为我们目前尚未在项目中配置任何bean:
RootConfig.java
package com.javacodegeeks.example.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@ComponentScan(basePackages = { "com.javacodegeeks.example.*" })
public class RootConfig {
}
为了使该项目成为MVC项目,我们需要制作一个WebMvcConfigurer
类,该类也使用@EnableWebMvc
注释对其进行标记。 这将启用项目的MVC性质:
WebMvcConfig.java
package com.javacodegeeks.example.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.javacodegeeks.example.*" })
public class WebMvcConfig implements WebMvcConfigurer {
}
准备好项目的配置后,我们现在可以添加Controller作为最后一步。 为了演示,我们将制作一个简单的GET API,该API仅将String返回为“ Hello World”:
HomeController.java
package com.javacodegeeks.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class HomeController {@GetMapping("/hello")@ResponseBodypublic String helloWorld() {return "Hello World";}
}
当我们运行该项目时,我们将在浏览器中看到一条简单的消息。 打开我们配置的URL,它是:
网址
localhost:8080/hello
我们将看到以下输出:
有关为何需要配置类的详细说明,请阅读Spring MVC Tutorial 。
11.结论
在这篇文章中,我们讨论了与Spring框架相关的各种Maven依赖关系,这使每个依赖关系的模块化以及它们如何相互独立的事情一目了然。 本课是了解所需依赖项的绝佳起点。 我们还研究了Spring Framework依赖关系的几个部分,以及JUNit和Mockito的依赖关系,即使它们不是Spring Framework本身的一部分,但经常与基于Spring的项目一起使用,以为Spring Framework的各个层提供广泛的测试支持。
最后,我们学习了如何使用简单的maven命令显示项目的依赖关系树,并观察项目的哪些依赖关系还取决于其他哪些依赖关系。
在此处阅读有关Spring Framework的更多课程。
12.下载源代码
本课说明了如何使用Spring框架的Maven依赖关系,以及如何通过将依赖关系保持独立和模块化来呈现特定的用例。
您可以在此处下载此示例的完整源代码: JCG-SpringMaven-Example
翻译自: https://www.javacodegeeks.com/2018/04/spring-with-maven-tutorial.html