前两天说要写一个项目继续迭代。许多小伙伴表示支持和鼓励。该项目的第一篇文章在这里你不在这里吗?我为项目选择了一个名称。英文名:austin,中文名:Austin。这个名字没有任何特殊含义。我只是觉得这个名字很好听,说白了就是喜欢。给项目命名的时候,不必那么规矩。您可以根据自己的想法选择系统的名称。只要人用了你的系统,自然就会“入乡随俗”。不说别的,进入今天的主题。从零开始做项目需要搭建技术环境,今天就来说说搭建技术环境。本文主题大纲:Maven、SpringBoot、Git什么是MAVEN?为什么要使用MAVEN?Maven是一个“项目管理”工具。我记得我上大学的时候,没有用过Maven。每次学习最头疼的就是各种依赖的jar包。当我了解到Maven的时候,我对这个工具的第一印象是:这个东西是一个“依赖包管理”的工具。初体验后,直呼太好吃了!再也不用到处找jar包了!实际上,Maven不仅承担了“依赖包管理”的功能,在日常开发使用中还承担着“编译”、“测试”、“打包”、“部署”等功能。日常开发中经常用到的maven命令:1、mvncompile2、mvntest3、mvnclean4、mvnpakage5、mvninstall6、mvndeploy7、mvnversions:set-DnewVersion=xxxx设置Maven8的版本,mvndependency:tree查看maven的依赖树(检查依赖关系很有效)常用参数-Dmaven.test.skip=true-Dmaven.javadoc.skip=true现在很多Java后端项目使用Maven作为“项目管理”工具,至少我接触过的都是。有人好奇:不是有近几年的后起之秀Gradle吗?说实话,我没用过(:不过我也去简单了解了一下,据我所知,总体来说,Gradle比Maven好,更灵活简洁,目前多用于Android还有一点很重要,Gradle相比Maven,学习成本更高。现在Java后端项目越来越轻,很多时候不需要那么“灵活”(Maven提供的功能基本够用了)。为了简单起见,XML也不是不可读的(毕竟现在大家都在IDE上开发)。所以,我这次搭建的项目也是直接使用了Maven,但是因为我没有深入使用过Gradle,所以不能说Maven比Gradle更适合我(:但至少,就目前而言,我认为Maven还可以奋斗了10年,这次SPRINGBOOT为什么选择SpringBoot作为项目的基础环境?至于为什么选择SpringBoot,跟大家分享一下群里的对话,记得有一天,群里有朋友问:今天去面试了,面试官问我用SpringBoot有什么好处,然后另一个小伙伴回答:用SpringBoot最大的好处就是让我这种垃圾级别的开发成为程序员。大学的时候学过SpringBoot,之前用过SSH和SSM,学这些东西的时候没有用过Maven,那时候搭建环境特别麻烦。(当时我也是写了一篇博客记录一下我是如何集成SSH和SSM的。)几种技术栈,不同的技术栈需要有相应的配置(常见的Spring,SpringMVC,Mybatis)等,然后这些技术需要兼容相应的版本(通常我们将这些技术集成到Spring中)。当我们要引入一个新的框架时,自然需要对接Spring版本,并有相应的配置文件。那时候真的是一个配置地狱(框架很灵活,支持我们把可能需要改的内容写成XML配置。但是随着时间的推移,我们逐渐发现我们无法维护这些XMLconfigurations...)基于这样的背景,SpringBoot应运而生,最明显的就是简化了我们开发的配置工作。当一种技术能够减少开发的工作量时,有一个特点:约定大于配置(开箱即用)。只要引入SpringBoot,几行代码就可以从头快速编写出相应的HTTP接口(可以参考官网的SpringBoot快速入门)我们以前做这种事情,需要集成SpringMVC,我们需要配置一个Tomcat服务器,我们需要对齐他们的版本(是否兼容)....我觉得SpringBoot作为使用者,需要明白以下两点:1.当我们引入我们项目中的SpringBoot依赖(spring-boot-starter-parent),点击parent,会发现pomspring-boot-dependencies定义了很多“默认依赖”。这样我们在项目中使用的时候就不用写版本了(因为SpringBoot默认已经帮我们写好了),也不用担心版本冲突(:2.启动SpringBoot项目时,它还会帮助我们初始化很多默认配置。(这也是面试经常考察“自动配置”的地方)。一般来说,@SpringBootApplication相当于下面三个注解:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan其中@EnableAutoConfiguration是关键(开启自动配置),内部实际加载的是META-INF/spring.factories文件的信息,以及然后filters输出以EnableAutoConfiguration为key的数据,加载到IOC容器中,实现自动配置功能!现在新写的Java后端项目基本都是用SpringBoot作为开发环境(:毕竟真的很爽\作为程序员,最烦的就是各种环境配置和版本依赖的问题(真是又脏又累)累了)Live),虽然经常只用一次,但是感觉就像下图:为什么项目结构是多模块的?我建了工程,取名:austin,然后在IDEMavenModule上新建了几个,目前(以后可能会添加):common(基本信息->POJO/枚举配置)support(数据获取->DB/Redis/Elasticsearch)service-api(服务接口)service-api-imp(服务接口实现)web(HTTP接口)刚开始学写代码的时候,我们并没有太在意。我们只是在一个package里面放一个shuttle就完事了(:后来他们说要分包,把不同模块的代码写到不同的package里面。所以我们会在package下新建一个对应的package(其实就是一个文件夹)project,比如dao/service/controller,到现在基本都是按模块划分,不同职责的代码在模块上划分对应。Austin下的pom文件一般只用来管理依赖(依赖和版本信息定义在父pom上,具体需要导入哪个子模块)
