Maven教程之春
1.簡介
在本文中,我們將演示如何針對非常特定的用例對Spring使用Maven依賴項(xiàng)。 我們使用的所有庫的最新版本都可以在Maven Central上找到。
對于一個有效的構(gòu)建周期而言,了解Maven依賴項(xiàng)的工作方式以及如何對其進(jìn)行管理非常重要,并且對于在我們的項(xiàng)目中使用的各種庫之間有關(guān)哪些版本匹配的清晰概念也很重要。 這是由于我們經(jīng)常在多個項(xiàng)目中重復(fù)一組依賴項(xiàng)的原因。 當(dāng)我們不明白為什么要使用特定的庫版本時,我們應(yīng)該犯錯誤。 讓我們了解不同的Spring Framework依賴關(guān)系之間的關(guān)系。
2.項(xiàng)目設(shè)置
我們將使用許多Maven原型之一為我們的示例創(chuàng)建一個示例項(xiàng)目。 要創(chuàng)建項(xiàng)目,請在將用作工作空間的目錄中執(zhí)行以下命令:
創(chuàng)建樣本項(xiàng)目
mvn archetype:generate -DgroupId=com.javacodegeeks.example -DartifactId=JCG-SpringMaven-Example -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false如果您是第一次運(yùn)行maven,則完成生成命令將花費(fèi)幾秒鐘,因?yàn)閙aven必須下載所有必需的插件和工件才能完成生成任務(wù)。
Spring Maven項(xiàng)目設(shè)置
請注意,現(xiàn)在,您將在所選目錄中擁有一個與artifactId同名的新目錄。 現(xiàn)在,隨時在您喜歡的IDE中打開項(xiàng)目。 另外, 僅當(dāng)我們添加適當(dāng)?shù)腟pring依賴項(xiàng)時,才需要該項(xiàng)目來演示各種依賴項(xiàng)樹 。
最后,我們使用一個簡單的maven命令來代替使用IDE來創(chuàng)建該項(xiàng)目。 這有助于我們使項(xiàng)目設(shè)置和初始化不受您可能使用的任何特定IDE的影響。
3. Maven的Spring依賴
由于Spring Framework具有高度模塊化的性質(zhì),因此添加一個依賴關(guān)系不會對另一個依賴關(guān)系產(chǎn)生要求。 例如,Spring Context依賴不需要任何Spring MVC依賴或Spring數(shù)據(jù)庫。 因此,我們將在各自獨(dú)立的部分中介紹每個依賴項(xiàng)。
要添加Spring Context支持,這里是需要的依賴項(xiàng):
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>請注意,我們使用了發(fā)布此文章時發(fā)布的最新可用Spring版本。 同樣,可以在Maven Central上找到我們使用的所有庫的最新版本。
要了解添加特定依賴項(xiàng)時添加到項(xiàng)目中的所有依賴項(xiàng),我們可以運(yùn)行一個簡單的Maven命令,該命令使我們能夠查看項(xiàng)目的完整依賴項(xiàng)樹。 這是我們可以用來實(shí)現(xiàn)的Maven命令:
檢查依賴樹
mvn dependency:tree當(dāng)我們運(yùn)行此命令時,它將向我們顯示以下依賴關(guān)系樹:
Spring上下文依賴樹
spring-context庫將實(shí)際的Spring Injection Container引入了項(xiàng)目,并需要更多的JAR,例如spring-aop , spring-beans , spring-core , spring-expression和spring-jcl 。 當(dāng)我們運(yùn)行上面的命令時,在向我們展示依賴樹之前,maven首先再次下載了JAR,以確認(rèn)是否已更改。
請注意,如果其中一個依賴項(xiàng)需要另一個依賴項(xiàng)才能運(yùn)行,它也會被下載,并在上面的依賴關(guān)系樹中顯示為該樹的子分支。 當(dāng)某個依賴項(xiàng)將另一個依賴項(xiàng)帶入構(gòu)建系統(tǒng)的依賴項(xiàng)池中時,將清除間接依賴項(xiàng)的子分支表示方法。
最后,我們在此處添加的spring-context依賴項(xiàng)是runtime范圍 。 這是因?yàn)閮H在運(yùn)行時才需要此JAR,以僅提供與Spring相關(guān)的類,并且不直接在項(xiàng)目中使用,至少不用于簡單項(xiàng)目。
4. Spring Persistence Maven依賴關(guān)系
現(xiàn)在,讓我們看一下Spring Persistence實(shí)現(xiàn)所需的核心依賴項(xiàng):
Spring持久性
<dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${org.springframework.version}</version> </dependency>當(dāng)我們查看此庫的依賴關(guān)系樹時,我們會發(fā)現(xiàn)JDBC和Transaction支持也包含在此依賴關(guān)系中:
Spring持久性依賴樹
5. Spring MVC Maven依賴關(guān)系
Spring MVC Maven依賴關(guān)系是您開始使用Spring處理Web項(xiàng)目時將使用的主要依賴關(guān)系。 這是在項(xiàng)目中設(shè)置Spring MVC的maven依賴項(xiàng):
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依賴項(xiàng)家族中最常用的依賴項(xiàng)之一。 現(xiàn)在讓我們看一下spring-web和spring-webmvc庫的依賴關(guān)系樹:
Spring MVC依賴樹
spring-web庫包含Servlet Environment的最常用的Web實(shí)用程序。 第二個庫spring-webmvc為Servlet環(huán)境提供了MVC支持 。
6.通過Maven提供測試支持
測試始終是項(xiàng)目不可或缺的一部分。 在Spring中,我們對庫也有依賴性,我們也可以測試我們的應(yīng)用程序。 其依賴項(xiàng)定義為:
彈簧測試
<dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${org.springframework.version}</version> </dependency>讓我們看一下所有庫及其依賴樹所包含的內(nèi)容:
Spring測試依賴樹
即使這就是我們現(xiàn)在需要的所有測試依賴項(xiàng),我們也會在這里查看Spring Framework中使用的兩個最常用的測試庫JUnit和Mockito 。
7. Spring Security Maven依賴關(guān)系
在Spring Security with Maven課程中詳細(xì)討論了與Spring Security支持相關(guān)的Maven依賴關(guān)系。
8.在Maven中使用JUnit
要在基于Spring的項(xiàng)目中添加JUnit依賴項(xiàng),只需添加一個具有test范圍的簡單依賴項(xiàng):
JUnit的
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope> </dependency>讓我們看一下所有庫及其依賴樹所包含的內(nèi)容:
JUnit依賴樹
JUnit也帶來了Hamcrest庫。 要在JUnit中使用Hamcrest匹配器,我們使用assertThat語句后跟一個或多個匹配器。 要了解Hamcrest中可用的匹配器,請閱讀Hamcrest匹配器教程 。
9.在Maven中使用Mockito
Mockito是使用最廣泛的Java測試依賴項(xiàng)之一,它還可用于模擬對象及其行為:
莫基托
<dependency><groupId>org.mockito</groupId><artifactId>mockito-all</artifactId><version>1.10.19</version><scope>test</scope> </dependency>讓我們看一下所有庫及其依賴樹所包含的內(nèi)容:
Mockito依賴樹
10.項(xiàng)目:Hello World
正如對Spring MVC的簡單演示一樣,我們將展示如何使用Spring MVC 5制作一個簡單的控制器。為此,我們使用了在Spring MVC部分中提到的依賴項(xiàng)以及一些Servlet容器依賴項(xiàng)。 這是我們在項(xiàng)目中使用的所有依賴項(xiàng)的列表:
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>要在項(xiàng)目中配置前端Controller,我們將對AbstractAnnotationConfigDispatcherServletInitializer類進(jìn)行子類化:
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[] { "/" };} }現(xiàn)在,我們需要創(chuàng)建一個Root配置類,該類將是空的,因?yàn)槲覀兡壳吧形丛陧?xiàng)目中配置任何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 { }為了使該項(xiàng)目成為MVC項(xiàng)目,我們需要制作一個WebMvcConfigurer類,該類也使用@EnableWebMvc注釋對其進(jìn)行標(biāo)記。 這將啟用項(xiàng)目的MVC性質(zhì):
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 { }準(zhǔn)備好項(xiàng)目的配置后,我們現(xiàn)在可以添加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";} }當(dāng)我們運(yùn)行該項(xiàng)目時,我們將在瀏覽器中看到一條簡單的消息。 打開我們配置的URL,它是:
網(wǎng)址
localhost:8080/hello我們將看到以下輸出:
SpringMVC Hello World
有關(guān)為何需要配置類的詳細(xì)說明,請閱讀Spring MVC Tutorial 。
11.結(jié)論
在這篇文章中,我們討論了與Spring框架相關(guān)的各種Maven依賴關(guān)系,這使每個依賴關(guān)系的模塊化以及它們?nèi)绾蜗嗷オ?dú)立的事情一目了然。 本課是了解所需依賴項(xiàng)的絕佳起點(diǎn)。 我們還研究了Spring Framework依賴關(guān)系的幾個部分,以及JUNit和Mockito的依賴關(guān)系,即使它們不是Spring Framework本身的一部分,但經(jīng)常與基于Spring的項(xiàng)目一起使用,以為Spring Framework的各個層提供廣泛的測試支持。
最后,我們學(xué)習(xí)了如何使用簡單的maven命令顯示項(xiàng)目的依賴關(guān)系樹,并觀察項(xiàng)目的哪些依賴關(guān)系還取決于其他哪些依賴關(guān)系。
在此處閱讀有關(guān)Spring Framework的更多課程。
12.下載源代碼
本課說明了如何使用Spring框架的Maven依賴關(guān)系,以及如何通過將依賴關(guān)系保持獨(dú)立和模塊化來呈現(xiàn)特定的用例。
下載您可以在此處下載此示例的完整源代碼: JCG-SpringMaven-Example
翻譯自: https://www.javacodegeeks.com/2018/04/spring-with-maven-tutorial.html
總結(jié)
- 上一篇: 无状态会话的ejb_Java EE状态会
- 下一篇: 镀铬怎么读 镀铬解释