前两天我说要写个我的项目来继续迭代,有好多小伙伴都示意反对和激励,我的项目的第一篇这不就来了么~

我给我的项目取了个名字,英文名叫做:austin,中文名叫做:奥斯丁

名字倒没有什么特地的含意,我单纯感觉这个名字难看,说白了就是我喜爱。

在起我的项目名的时候,能够不要获得那么规矩。取零碎名字能够按本人想法来搞就行了,人家只有用了你的零碎,就天然「入乡随俗」了。

不聊别的了,进入明天的主题吧。

从零开始一个我的项目,也得搭建技术环境的,所以明天先来聊聊搭建技术环境的内容吧

本文主题纲要:Maven和SpringBoot以及Git

什么是MAVEN?为什么要用MAVEN?

Maven是一个「项目管理」的工具

我记得以前我在大学的时候,还没用到Maven,每次学习最头疼的就是各种的依赖jar包。当我学习到Maven的时候,这个工具给我的第一感觉就是:这货色就是一个「依赖包治理」的工具

初体验之后,直呼太TM香了!再也不必到处去找jar包了!

其实,Maven不仅仅承当着「依赖包治理」性能,同时他在日常开发应用中也承当着「编译」、「测试」、「打包」、「部署」等等性能。

我在日常开发中罕用到的maven命令:

1、mvn compile 2、mvn test 3、mvn clean 4、mvn pakage 5、mvn install 6、mvn deploy  7、mvn versions:set -DnewVersion=xxxx  设置Maven的版本  8、mvn dependency:tree  查看maven的依赖树(排查依赖很无效)罕用参数-Dmaven.test.skip=true-Dmaven.javadoc.skip=true

当初Java后端我的项目很多都是用Maven来作为「项目管理」的工具,至多我接触的都是。

有的人就好奇了:近几年不是有个后起之秀Gradle

说实话,我是没用过(:不过我也去简略理解了一番。

据我理解到的,总的来说,Gradle比Maven更灵便和简洁,目前多用在Android我的项目上。还有很重要的一点,绝对Maven而言,Gradle学习老本更大

当初Java后端的我的项目也越来越轻量,很多时候也不须要那么地”灵便“(Maven提供的性能根本够用)。对于简洁来说,XML也不是不能看(毕竟当初大家都在IDE上开发嘛)。所以,这次我构建的我的项目也间接用的Maven

不过啊,因为我是没深度应用过Gradle,所以也不能说我用Maven比Gradle肯定要适合(:但至多,在当初,我认为Maven还能战10年

为什么SPRINGBOOT

这次我选用SpringBoot作为我的项目的根底环境,至于为什么SpringBoot,我先跟大家分享下群里的对话。

我记得有一天,有个小伙伴在群里问:明天我去面试了,面试官问我应用SpringBoot有什么益处

接着,另一个小伙伴答复:应用SpringBoot最大的益处,就是让我这种垃圾程度的开发都入了行,做上了程序员。

我在大学时是学过SSH和SSM的,我学这些的时候还没用Maven,那时候搭建环境就尤其麻烦了。(过后还专门写了博客记录本人是如何整合SSH和SSM的)

一个我的项目里会用好几种技术栈,不同的技术栈就须要有对应的配置(常见的Spring、SpringMVC、Mybatis)等等,而后这些技术都须要兼容对应的版本(个别咱们是把这些技术整合到Spring上的)。当咱们要引入新的框架,那天然就须要对齐Spring版本并且有对应的配置文件。

那时候真的是配置天堂(框架们都做得灵便,都反对咱们把可能须要改变的内容写到XML配置上,但随着工夫流逝,咱们慢慢发现:这些XML配置咱们都保护不动了...)

基于这种背景下,SpringBoot应运而生,它最显著的就是简化了咱们开发的配置工作。当一项技术能缩小开发时工作量都有一个特点:约定大于配置(开箱即用)

只有引入了SpringBoot,那只有通过几行的代码就能疾速地从零写出对应的HTTP接口(可参考官网SpringBoot 的Quick Start)

以前咱们干这种事,须要整合SpringMVC,须要配置一个Tomcat服务器,须要对齐它们的版本(是否兼容)....

我认为SpringBoot作为应用方,要理解以下两块内容:

一、当咱们我的项目咱们引入了SpringBoot的依赖(spring-boot-starter-parent),点进去parent就会发现spring-boot-dependencies这个pom定义了十分多「默认的依赖」。这使得咱们在我的项目中应用的时候,都不必写版本了(因为SpringBoot曾经默认帮咱们曾经写上了),还不必放心版本抵触的问题(:

二、在启动SpringBoot我的项目的时候,还会帮咱们初始化很多默认的配置。(这里也是一个面试常常考查的中央「主动配置」)。总的来说,@SpringBootApplication等同于上面三个注解:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

其中@EnableAutoConfiguration是要害(启用主动配置),外部实际上就去加载META-INF/spring.factories文件的信息,而后筛选出以EnableAutoConfiguration为key的数据,加载到IOC容器中,实现主动配置性能!

当初新写的Java后端我的项目,根本都是用SpringBoot作为开发环境了(:毕竟是真的爽

\
作为程序员,我最烦的就是搞各种环境配置和版本依赖的问题(真正的脏累活),尽管很多时候只用搞一次,然而感觉很多时候就真的如下图:

为什么我的项目构造是多模块?

我搭建了我的项目,取了个名字叫:austin,而后我在IDE上新建了几个Maven Module,目前别离是(前面可能还会新增):

  • common(根本信息->POJO/枚举配置)
  • support(Data获取->DB/Redis/Elasticsearch)
  • service-api(服务接口)
  • service-api-imp(服务接口实现)
  • web(HTTP接口)

最开始咱们初学写代码的时候,可没那么考究,间接在一个包下一把梭就完事了(:

起初,他们说要分包,不同模块的代码写到不同的包上。于是咱们会在我的项目下新建对应包(其实就是文件夹),比如说dao/service/controller

而到当初,根本都是分模块了,不同职责的代码被分到对应的模块上。而austin直属下的pom文件就个别只用来治理依赖(把依赖和版本信息定义在父pom上,具体哪个子模块须要引入就好了)

<dependencyManagement>  <dependencies>    <!--mysql驱动包-->    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.35</version>    </dependency>  </dependencies></dependencyManagement>

那么这种分模块又比以前分包好在哪里呢?

假如咱们是分包的,那相当于所有的代码写到一个模块上。每次当咱们批改时,咱们须要从新编译整个模块(可能我只改了Dao包的某个实现类,但在编译的时候会把整个模块都编译一遍)。

如果是分模块的话,咱们间接到模块下 mvn compile -Dmaven.test.skip=true 就完事了。

不过这只是一个方面,说服力如同也不太足。我认为最次要的是,咱们分模块了当前能够复用

比方,当初我有austin这个我的项目,此时为了对数据进行解决,我须要去新建对应的Flink利用。可能受限于环境下,不会把flink相干的代码写在austin我的项目下

(这也只是举了个例子,我想表白的是:一个成熟的我的项目往往不只有一个Git地址就笼罩了整个性能。在绝大多数时候,不同的性能都会离开到不同的我的项目上)。

那不同的我的项目下,很有可能须要做的事件是有反复的(比方我都须要去读数据库获取数据)。那这时候,分模块的益处就体现进去了:能够间接引入对应的jar包(比方support包和common包)。

那就不必在两个不同的我的项目上,写截然不同的代码了(:可能共用一套代码

有没有小伙伴好奇为什么apiapi-impl是分了两个模块的吗?这里是为了:如果当前引入了RPC调用,那咱们只须要提供api模块进来就好了,api模块的依赖个别很少。

(解决版本抵触是一件脏累活,人家嵌入你的SDK只是想用你的服务去获取对应信息,你别给人家整了一大堆毫无作用的依赖进去)

为什么GIT

到这里,我的项目的架子曾经搭好了。我要把我的项目上传到Gitee跟大家欢快地游玩(:

Git是一个版本控制工具。把austin被Git治理后,我每次提交的内容都会被看到(:这在多人合作中尤其重要

除此之外,有了“版本”的概念当前,用Git能够随便回退版本(有后悔药吃

我过后刚进去实习的时候,那家公司用的是SVN(我过后对版本控制工具了解其实是很含糊的,反正在我过后看来,就是把写好的代码上传到地方服务器,只不过它能比照出每次批改的异同)

起初当前,在公司接触都是Git了(当初开发根本离不开Git了,这玩意自身还是比拟好学的,用起来还是挺爽的)

顺便发一波我日常用到的Git命令吧:

1. git clone  (克隆代码)2. git checkout -b (新建分支)3. git checkout (切换分支)4. git add / git commit /git push (这几步我根本都是在IDE上用快捷键实现,很少本人敲命令)5. git fetch (获取最新的批改信息)6. git merge (合并代码)  7. git stash /git pop (有的时候长期会用,把代码放到暂存区中)  8. git reset --hard  (代码写烂了,间接回退吧)

个别Git我是一半用命令行,一半用IDE集成的工具。总的来说,怎么难受怎么来(没有限定说肯定要用命令行,我是本人怎么操作比拟快就怎么搞)

对于这个我的项目而言,我这里应用到Git最大的起因就是:有近程的仓库装载我的代码,并且你们能看到(:

Gitee链接:https://gitee.com/austin

GitHub链接:https://github.com/austin

总结

说实话,如果还没工作的人,我倡议多学学Maven和Git的根本应用(这样一来,去到公司就不必一脸懵逼了)

对于SpringBoot的学习是永无止境的,我集体的了解是,在理解了用法当前,能够尝试面向「面试题」进行学习(毕竟面试题面的内容大多数都是比拟外围的,至多不是偏门没有任何用处的)

austin我的项目构建:

  • Maven:依赖包管径+项目管理(多模块)
  • SpringBoot:根底技术环境搭建(开箱即用)
  • Git:版本控制工具(代码上传至近程Gitee)

明天就到这里吧。我花了一个早晨搭建了架子,两个早晨写了这篇文章。自从有了这个迭代我的项目的想法当前,早晨的效率嘎嘎地就下来了。

关注我的微信公众号【Java3y】来聊点不一样的!

【对线面试官+从零编写Java我的项目】 继续高强度更新中!求star!

原创不易!!求三连!!