网站建设技术部职责,洛阳做网站的,微网站模板源代码,网站建设维护资质框架基础
Maven基础 Maven概述 Maven是为Java项目提供项目构建和依赖管理的工具 Maven三大功能
- 项目构建构建#xff1a;是一个将代码从开发阶段到生产阶段的一个过程#xff1a;清理#xff0c;编译#xff0c;测试#xff0c;打包#xff0c;安装#xff0c;部署…框架基础
Maven基础 Maven概述 Maven是为Java项目提供项目构建和依赖管理的工具 Maven三大功能
- 项目构建构建是一个将代码从开发阶段到生产阶段的一个过程清理编译测试打包安装部署等
- 依赖管理Jar包下载,Jar包依赖,jar包冲突
- 契约编程约定大于配置配置大于编码注意Maven连接远程仓库是需要联网的如果没有网络那么会构建失败
Maven仓库
所谓仓库就是用来存放Jar包和插件的地方在Maven中仓库又分为三种 本地仓库 远程仓库 中央仓库 中央仓库依赖搜索地址**建议收藏**https://mvnrepository.com/私服仓库 注意私服仓库搭建技术Nexus
Maven配置
第一步创建本地仓库文件夹
第二步修改settings.xml配置文件中的本地仓库地址
第三步配置阿里云镜像
第四步配置JDK版本注意记得保存配置 Maven坐标 Maven中的坐标是项目的唯一标识通过该坐标可以确定项目Jar包在仓库中的位置也可以通过坐标来引入项目中所需要的三方依赖 Maven坐标主要组成 groupId当前Maven项目隶属于组织名称通常都是公司域名反写例如cn.itsourceartifactId项目或者是项目中的一个模块的名称version当前Maven项目版本号根据需求进行设定 SNAPSHOT快照版本正在迭代过程中不稳定的版本RELEASE释放表示正式版本稳定版本 注意当我们需要某一个jar包时可以通过坐标本地仓库的jar包或依赖包 当然我们的项目也可以安装到本地仓库执行install命令将项目打成Jar包放在本地仓库中 parentgroupIdcn.zhj/groupIdartifactIdparent/artifactIdversion1.0-SNAPSHOT/version/parentMaven命令
**mvn compile**编译 - 将java源文件.java 编译成 字节码文件.class**mvn clean**清理 - 将编译好的字节码文件删除掉**mvn clean compile**清理编译**mvn test**测试 - 运行测试代码测试代码编译在target的test-classes中 注意src/test/java中的所有测试类的所有方法都会自动运行但是测试类的类名有要求TestXxx 或 XxxTest**mvn package**打包【.class字节码文件】**mvn source:jar**打源码包【.java文件】**mvn install**安装 - 将项目打包然后将jar包安装到本地仓库中**mvn package -Dmaven.test.skiptrue**打包的时候跳过测试类注意测试的时候看下目录结构的变化和maven仓库目录的变化 搜索并下载依赖 第一步中央仓库依赖搜索地址https://mvnrepository.com/ 第二步将搜索到的依赖导入拷贝到pom.xml中然后点击刷新点击刷新时如果本地仓库有当前版本的依赖就不会去下载直接引用本地仓库的依赖。如果没有就会去远程仓库下载下载到本地再引用 注意如果本地仓库有可以直接提示直接引入 IDEA执行Maven命令 在IDEA中执行Maven命令非常简单只需要点击右侧Maven按钮然后在工程的生命周期中双击想要执行的命令即可 查看工程依赖(略) 依赖传递 在Maven中依赖是具有传递性的例如我们刚才项目中只引入了Junit依赖但是我们也间接依赖了Junit的其他依赖。在Maven项目中依赖分为直接依赖和间接依赖 直接依赖Junit就是工程的直接依赖 间接依赖hamcrest-core就是工程的间接依赖 依赖排除 Maven具有依赖的传递性对我们来说是非常大的一个好处因为这样就避免我们需要去自己引入间接依赖。但是有时候我们在引入多个依赖时简介依赖的版本不一致会导致依赖冲突那么此时我们就需要阻断依赖。以Junit为例阻断间接依赖 dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope!--排除依赖标签可以写多个--exclusions!--排除依赖标签写具体要排除那个依赖只需要写GA坐标即可--exclusion!--要排除依赖的G坐标--groupIdorg.hamcrest/groupId!--要排除依赖的A坐标--artifactIdhamcrest-core/artifactId/exclusion/exclusions/dependency依赖范围
在Maven中依赖是具有作用范围的默认情况下依赖的Jar包在任何地方都可以使用我们可以通过…进行依赖作用范围的指定
主程序范围有效main文件夹范围内测试程序范围有效test文件夹范围内是否参与打包运行package指令范围内
scope取值
scope值主程序main测试程序test打包/运行compile–默认YYYtestNYNprovidedYYNruntime-YY 清理Maven仓库 初始情况下我们的本地仓库是没有任何Jar包的第一次会联网进行下载可能由于网络的原因Jar包下载不完全这些不完整的jar包都是以lastUpdated结尾 注意如果依赖下载失败Maven识别到以lastUpdated结尾的文件后就不会再重新帮你下载需要你删除这些以lastUpdated结尾的文件然后Maven才会再次自动下载这些Jar包以后实际开发中如果项目引入了某Jar包刷新后依赖依然报错那么就需要检查一下此Jar包是否下载成功 解决方案有时下载依赖有可能批量下载失败那么此时我们手动去挨着找就非常麻烦那么我们可以定义一个脚本文件双击即可全部清除 第一步在桌面创建一个del_lastUpdated.bat文件创建文本改后缀即可 第二步右键编辑bat文件拷贝以下命令并修改本地仓库文件夹绝对地址 set REPOSITORY_PATH本地仓库文件夹绝对地址
rem 正在搜索...
del /s /q %REPOSITORY_PATH%\*.lastUpdated
rem 搜索完毕
pause第三步双击执行脚本即可清除本地仓库下所有lastUpdated文件
Maven高级
继承
在Java中有继承的概念就是子类继承父类的所有方法和属性。在Maven中同样有继承的概念并且与Java一致都是单继承本质上Maven的继承就是pom.xml配置的继承
A工程继承了B工程那么A工程就继承了B工程的pom.xml所有配置Maven继承的层级是没有限制的大型互联网项目中层级会非常多我们只需要按照规则去梳理层级即可 为什么需要继承 原因一真实开发中依赖动则几十上百个依赖那么这些依赖的版本管理是非常复杂的为了方便版本管理那么可以在父工程中统一管理版本信息。子工程直接使用对应版本即可SpringBoot框架就是使用了Maven继承手段进行开发简化 原因二真实开发中一个项目会有很多个子工程这些子工程都有自己的依赖那么肯定会有一些重复的依赖为了减少子工程重复导入依赖坐标信息可以放在父工程中进行依赖抽取子工程通过继承的方式进行依赖的引入 搭建Maven继承工程 第一步创建一个Maven工程 第二步 删除父工程下的src文件夹因为父工程只负责管理pom.xml不负责编写代码所以不需要src文件修改打包方式为pom只有打包方式为pom的工程才能管理其他Maven工程 第三步创建子工程/Maven模块 父子工程解析 子工程创建好之后会自动生成parent标签指向父工程的GAV坐标子工程是不需要写GV坐标的因为继承自父工程子工程只需要提供A坐标即可父工程中有子工程后会自动生成modules标签代表聚合配置后续会进行讲解 父工程管理依赖 第一步父工程管理依赖 dependencyManagement此标签用于在父工程中管理依赖但是不负责引入此依赖到工程中子工程需要使用什么依赖还是需要在自己的子工程中手动引入只是不需要引入版本版本来自父工程 第二步子工程引入依赖 配置自定义属性 父工程在真实开发中会管理众多的依赖那么这些依赖的版本号如果都写在各自的GAV坐标中其实管理起来也颇为复杂所以我们可以自定义属性进行管理 properties此标签是配置标签我们可以在标签内自定义标签来定义属性值此属性值可以被引用 itsource.junit.version此标签是自定义的标签名称就是属性引用名称标签的值就是版本值 ${}通过此方式可以引入自定义属性大括号中的值就是自定义标签的值
项目结构 实例代码
!-- parent的pom.xml --
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcn.zhj/groupIdartifactIdparent/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packagingmodulesmoduleson1/modulemoduleson2/module/modulespropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingdom4j-version1.1/dom4j-version/propertiesdependencyManagementdependenciesdependencygroupIddom4j/groupIdartifactIddom4j/artifactIdversion${dom4j-version}/version/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.1/version
!-- scopetest/scope--/dependency/dependencies/project!-- son1的pom.xml --
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcn.zhj/groupIdartifactIdparent/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdson1/artifactIdpropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIddom4j/groupIdartifactIddom4j/artifactId/dependency/dependencies/project!-- son2的pom.xml --
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcn.zhj/groupIdartifactIdparent/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdson2/artifactIdpropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIddom4j/groupIdartifactIddom4j/artifactId/dependency/dependencies
/project聚合 什么是聚合 在父pom.xml中的modules标签就是聚合标签他表示了此工程由哪些模块组成modules下的module也代表了此父工程管理了哪些子模块 聚合的好处 好处一如果没有聚合那么我们例如在执行mvn install命令时Maven会要求有父工程时先安装父工程有依赖工程时先安装依赖工程那么我们自己来考虑这些规则就非常麻烦我们可以直接对父工程执行mvn install那么整个工程就自动打包好了 好处二配置聚合之后各个子模块在父工程中展示一个列表可以快速让我们知道整个项目的继承结构
MAVEN扩展知识
1. IDEA的目录结构Maven项目结构.idea目录 - idea中项目配置文件如果删除了项目崩溃src - 项目开发目录target - maven项目编译目录.gitignore - git项目版本控制器上传到码云giteegithup上时忽略文件pom.xml - maven项目核心配置文件设置如何不显示再IDEA中settings - Editor - File Types - Ignored Files and FoldersSpring概述
Spring发展史 Spring时代 Spring框架于2003年首次发布由Rod Johnson创立它的目标是简化Java开发并提供一种更灵活、高效的替代方案 Spring框架引入了依赖注入DI和面向切面编程AOP等新概念以减少组件之间的耦合度、提高代码的可维护性和可测试性 Spring通过IoC容器控制反转容器来管理对象之间的依赖关系并提供了许多其他功能模块如数据访问、事务管理、安全性等使开发者能够更专注于业务逻辑的实现 **小结**Spring提供IOC控制反转 - 管理对象提供了AOP - 抽取公共业务 SpringBoot时代 随着时间的推移Spring框架变得越来越强大和复杂为了简化Spring应用程序的开发和部署SpringBoot在2014年推出 Spring Boot是一个用于快速构建独立的、生产级的Spring应用程序的框架。它采用了约定大于配置的原则通过自动配置和默认值设置减少了繁琐的配置工作提供了更简单、更轻量级的开发体验 Spring Boot还集成了一些常用的第三方库和工具如内嵌的Servlet容器、自动化的构建工具如Maven和Gradle、健康检查、监控等使开发者能够更快速地启动和运行Spring应用程序 总结 总体而言Java企业级开发经历了从繁琐复杂的Java EE时代到简化灵活的Spring时代再到更快速便捷的Spring Boot时代的演进 这些框架和工具的不断演进和创新推动了Java开发领域的发展为开发者提供了更好的工具和技术支持助力他们构建出高质量、可扩展的企业级应用程序 现在在Java领域Spring已经形成了一种开发生态圈了Spring提供了各个领域的开发解决方案所以现在在任何Java项目中都有Spring的身影有一句话叫做面向Spring编程毫不夸张。Spring的这一套技术我们也称为Spring全家桶【spring,springJDBC,SpringMvc,SpringBoot,SpringCloud】
Spring简介
Spring框架全称SpringFramework一般都简称为Spring
官网地址https://spring.io/
在Spring中提供了很多的开源项目这些开源项目为我们在Java开发中提供了各个领域的解决方案
在Spring全家桶中的众多项目中SpringFramework项目是最为核心的所有的项目都是基于Spring Framework的其中SpringBoot是SpringFramework的高级版本
为什么不再选择Spring 在企业级开发中我们选择Spring Framework进行开发那么我们会面临两个问题 配置繁琐入门难度大 SpringBoot中很多配置都是已经默认配置好了所以不再需要我们手动配置但是Spring Framework则不然这些配置不配置好就无法使用。同样的入门在SpringFramework中可能需要半个小时但是SpringBoot只需要5分钟 现在企业都在追求高效开发因为高效就意味着高利润所以市面上的Java项目基本上都是基于SpringBoot进行开发。官方目前也更加推荐使用SpringBoot作为Java开发并且在后续的SpringCloud微服务项目中我们也必须需要使用SpringBoot 使用SpringFramework开发web项目时开发和部署都比较复杂SpringBoot内置Tomcat启动项目就像启动一个main方法一样的简单
SpringBoot入门
入门实现
搭建SpringBoot工程并实现浏览器与Java项目交互
实现步骤
第一步使用SpringBoot骨架搭建SpringBoot项目
第二步
SpringBoot依赖有很多版本我们学习使用SpringBoot-2.6.13勾选初始化依赖SpringBoot项目必须需要Web依赖所以我们需要勾选Web依赖。其他依赖在以后项目使用中根据实际需要进行勾选
第三步Springboot创建需要联网下载资源等待构建完成即可
第四步使用SpringBoot骨架进行创建会默认生成一些我们暂时使用不到的文件为了项目简洁我们删除即可
第五步创建请求处理类
请求处理类专门用来接收前端发起到后端的请求存储规范请求处理类按照规范必须放入到controller包下
第六步运行SpringBoot项目
SpringBoot项目中定义了一个启动类运行这个启动类可以把整个SpringBoot项目运行起来
第七步浏览器访问
浏览器输入地址http://localhost:8080/hello
项目结构 访问原理解析 入门案例访问原理 1. 运行启动类启动项目SpringBoot内置Tomcat启动成功会看到控制台的默认端口号8080
2. 当在地址栏输入http://localhost:8080/hello时浏览器访问的就是当前项目
3. 然后是用/hello去匹配我们的控制器Controller即匹配注解RequestMapping请求映射注解
4. 匹配上之后就会自动执行hello方法中的内容注解
RestController // 创建当前类的对象
RequestMapping(/hello/a) // 请求映射 - 匹配请求【从上下文路径后面开始算】,匹配上之后会执行当前方法的所有代码 - 实例方法【通过对象】
RequestMapping(/hello/a)中的(/hello/a) // http://localhost:8080/上下文路径/hello/a
SpringBootApplication // 申请当前类是一个SpringBootApplication的启动类 - 启动 - main方法启动application.properties:
#端口
server.port80
#应用的上下文路径也可以称为项目路径是构成url地址的一部分就是在你所有的请求路径之前加了一个前缀
server.servlet.context-path/资源路径 URL 什么是URLURL称为统一资源定位符可以直接使用此地址找到互联网上的资源。例如接口、页面 URL组成协议名://IP地址:端口号/资源名称。例如http://localhost:8080/hello URI 什么是URIURI统一资源标识符俗称请求资源路径URL地址中端口号后面的地址叫做URI。例如/hello
“/hello/a”) // http://localhost:8080/上下文路径/hello/a SpringBootApplication // 申请当前类是一个SpringBootApplication的启动类 - 启动 - main方法启动 application.properties:
#端口 server.port80 #应用的上下文路径也可以称为项目路径是构成url地址的一部分就是在你所有的请求路径之前加了一个前缀 server.servlet.context-path/
2. 资源路径- URL什么是URLURL称为统一资源定位符可以直接使用此地址找到互联网上的资源。例如接口、页面URL组成协议名://IP地址:端口号/资源名称。例如http://localhost:8080/hello- URI什么是URIURI统一资源标识符俗称请求资源路径URL地址中端口号后面的地址叫做URI。例如/hello**区别**:URL包含URIURI只是URL的一部分