maven安装教程安装教程_Maven教程之春

maven安装教程安装教程

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必须下载所有必需的插件和工件才能完成生成任务。

Spring 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上下文依赖树

spring-context将实际的Spring Injection Container引入了项目,并需要更多的JAR,例如spring-aopspring-beansspring-corespring-expressionspring-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支持也包含在此依赖关系中:

Spring持久性依赖树

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-webspring-webmvc库的依赖关系树:

Spring MVC依赖树

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测试依赖树

即使这是我们现在需要的所有测试依赖项,我们也会在这里查看Spring Framework中使用的两个最常用的测试库,即JUnit和Mockito 。

7. Spring Security Maven依赖关系

Spring Security支持相关的Maven依赖关系将在Spring Security with Maven课程中详细讨论。

8.在Maven中使用JUnit

要在基于Spring的项目中添加JUnit依赖项,只需添加一个具有test范围的简单依赖项:

JUnit的

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>

让我们看一下所有库及其依赖树所包含的内容:

JUnit依赖树

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>

让我们看一下所有库及其依赖树所包含的内容:

Mockito依赖树

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

我们将看到以下输出:

SpringMVC Hello World

有关为何需要配置类的详细说明,请阅读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

maven安装教程安装教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何完全卸载 Sublime Text

只是在应用程序删除软件是不够&#xff0c;你还必须把下面这个目录删除掉才行&#xff1a; /Users/liaowenxiong/Library/Application Support/Sublime Text /Users/liaowenxiong/Library/Preferences/Sublime Text /Users/liaowenxiong/Library/Caches/Sublime Text不这么干&…

5位随机数重复的概率 php_PHP产生不重复随机数的5个方法总结

无论是Web应用&#xff0c;还是WAP或者移动应用&#xff0c;随机数都有其用武之地。在最近接触的几个小项目中&#xff0c;我也经常需要和随机数或者随机数组打交道&#xff0c;所以&#xff0c;对于PHP如何产生不重复随机数常用的几种方法小结一下(ps&#xff1a;方法1、4、5是…

pytorch实现图像分类代码实例

图像多标签分类例子 import os import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision.datasets as datasets import torchvision.models as models import matplotlib.pyplot as plt from matplotlib.ticker import MultipleL…

空调吸气和排气_吸气剂和二传手被认为有害

空调吸气和排气Java程序员习惯性地用“ getters”和“ setters”来修饰类&#xff0c;这种做法根深蒂固&#xff0c;以至于几乎没有人质疑为什么这样做或是否应该这样做。 最近&#xff0c;我认为最好不要这样做&#xff0c;并且我开始在编写的Java代码中避免使用它。 在这篇博…

Sublime Text for Mac 如何格式化代码

文章目录格式化 HTML/CSS/JS格式化 Java/C/C格式化 HTML/CSS/JS 格式化 HTML/CSS/JS&#xff0c;请安装插件&#xff1a;html-css-js prettify 格式化的快捷键&#xff1a;Shift Cmd H html-css-js prettify 的简介&#xff1a; Usage Tools -> Command Palette (CmdS…

ic启动器我的世界_hmcl启动器下载-我的世界HMCL启动器下载 v3.3.172官方最新版--pc6下载站...

我的世界HMCL启动器是我的世界游戏玩家必备的游戏启动器&#xff0c;是三年来超过使用3亿次的老牌启动器&#xff0c;不需要其他任何设置&#xff0c;操作非常方便&#xff0c;本站提供现在最新版本下载。我的世界HMCL启动器是我的世界游戏玩家必备的游戏启动器&#xff0c;是三…

C++核心编程笔记

C核心编程1 内存分区模型1.1 程序运行前1.2 程序运行后1.3 new操作符2 引用2.1 引用的基本使用2.2 引用注意事项2.3 引用做函数参数2.4 引用做函数返回值2.5 引用的本质2.6 常量引用3 函数提高3.1 函数默认参数3.2 函数占位参数3.3 函数重载3.3.1 函数重载概述3.3.2 函数重载注…

Sublime Text 如何设置组合快捷键

Sublime 有个功能叫再次缩进&#xff08;Reindent&#xff09;&#xff0c;我就以这个功能为例讲下如何设置快捷键&#xff0c;这个功能的菜单路径是&#xff1a;Edit ➠ Line ➠ Reindent&#xff0c;有人说这个再次缩进可以格式化代码&#xff0c;扯淡&#xff0c;缩进两下也…

朝着理想坚实迈进_坚实原则:开放/封闭原则

朝着理想坚实迈进先前我们讨论了单一责任原则。 关于实体原则首字母缩写&#xff0c; 打开/关闭原则是该行中的第二个原则。 “软件实体&#xff08;类&#xff0c;模块&#xff0c;功能等&#xff09;应打开以进行扩展&#xff0c;但应关闭以进行修改” 通过采用该原理&…

协程asyncio_Python 异步模块 asyncio 中的协程与任务

协程&#xff08;Coroutine&#xff09;是允许执行被挂起、恢复、以及取消的程序。Python 3 中最初是使用 asyncio.coroutine 装饰器和 yield from 关键字组合来实现协程。单词 yield 在这里并非在生成器&#xff08;Generator&#xff09;中所表示的“产出”&#xff0c;而是交…

ie8兼容性视图灰色修复_IE8网页显示不正常 用”兼容性视图”搞定

网页显示不正常&#xff0c;出现图片错位&#xff0c;文字跑远……等等&#xff0c;别急&#xff0c;试试IE8自带的”兼容性视图”功能吧!其实出现网页显示问题&#xff0c;一般不是您的电脑或者浏览器有问题&#xff0c;而是由于各网站开发标准不同&#xff0c;所以在不同的浏…

GAN对抗生成网络原始论文理解笔记

文章目录论文&#xff1a;Generative Adversarial Nets符号意义生成器(Generator)判别器(Discriminator)生成器和判别器的关系GAN的训练流程简述论文中的生成模型和判别模型GAN的数学理论最大似然估计转换为最小化KL散度问题定义PGP_GPG​全局最优论文&#xff1a;Generative A…

php cdi_CDI和lambda的策略模式

php cdi策略设计模式在运行时动态选择一种实现算法&#xff0c;一种策略。 该模式可用于根据情况选择不同的业务算法。 我们可以将不同的算法实现定义为单独的类。 或者&#xff0c;我们利用Java SE 8 lambda和函数&#xff0c;这些lambda和函数在此处用作轻量级策略实现。 C…

Linux 命令之 cp -- 复制文件或目录

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;复制某个目录到某个目录下&#xff08;二&#xff09;复制文件&#xff08;三&#xff09;复制文件到目标目录下&#xff0c;若存在文件则备份&#xff08;四&#xff09;复制某个目录的全部文件到某个…

向上累积频数怎么算_excel数据分析向上累计和向下累计怎么做呢

2016-07-08 00:25赵飞虎 客户经理一、Excel在分析性测试、复核中的运用注册会计师在分析审计风险确定重点审计领域、重要性水平和重大异常经济业务事项时&#xff0c;常常要对被审计单位的会计报表进行分析性测试和复核。在执行具体审计程序时&#xff0c;也常常要对本期数和上…

okta使用_使用Okta的单点登录保护您的Vert.x服务器

okta使用“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 Vert.x是Spring生态系统中增长最快的元素之一&#xff0c;保护Vert.x服务器可…

Linux 命令之 make -- GNU的工程化编译工具

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;指定命令 make 的工作目录一、命令介绍 make 命令是 GNU 的工程化编译工具&#xff0c;用于编译众多相互关联的源代码文件&#xff0c;还可以编辑内核或模块&#xff0c;以实现工程化的管理&#xff0…

SDL2笔记

SDL2基本操作头文件主函数初始化创建窗口窗口暂停以及事件讲解销毁窗口(释放指针)并退出加载bmp图片新加载图片的方法(使用渲染、纹理)加载其他格式的图片头文件 #include "SDL.h" #include "SDL_image.h"主函数 int main(int argc,char* argv[]) //一定…

操作系统时间片轮换_《操作系统_时间片轮转RR进程调度算法》

转自:https://blog.csdn.net/houchaoqun_xmu/article/details/55540250时间片轮转RR进程调度算法一、概念介绍和案例解析时间片轮转法 - 基本原理&#xff1a;在早期的时间片轮转法中&#xff0c;系统将所有的就绪进程按先来先服务的原则排成一个队列&#xff0c;每次调度时&am…

java ee打印功能_Java EE 8的前5个新功能

java ee打印功能备受期待的Java Enterprise Edition 8版本具有两个令人兴奋的新API&#xff08;JSON绑定1.0和Java EE Security 1.0&#xff09;&#xff0c;并且对当前API进行了改进&#xff08;JAX-RS 2.1&#xff0c;Bean Validation 2.0&#xff0c;JSF 2.3&#xff0c;CDI…