作为程序员,我最烦的就是搞各种环境配置和版本依赖的问题(真正的脏累活),虽然很多时候只用搞一次,但是感觉很多时候就真的如下图:
为什么项目结构是多模块?
我搭建了项目,取了个名字叫:austin,然后我在IDE上新建了几个Maven Module,目前分别是(后面可能还会新增):
-
common(基本信息->POJO/枚举配置)
-
support(Data获取->DB/Redis/Elasticsearch)
-
service-api(服务接口)
-
service-api-imp(服务接口实现)
-
web(HTTP接口)
最开始我们初学写代码的时候,可没那么讲究,直接在一个包下一把梭就完事了(:
后来,他们说要分包,不同模块的代码写到不同的包上。于是我们会在项目下新建对应包(其实就是文件夹),比如说dao/service/controller
而到现在,基本都是分模块了,不同职责的代码被分到对应的模块上。而austin
直属下的pom
文件就一般只用来管理依赖(把依赖和版本信息定义在父pom上,具体哪个子模块需要引入就好了)
mysql
mysql-connector-java
5.1.35
那么这种分模块又比以前分包好在哪里呢?
假设我们是分包的,那相当于所有的代码写到一个模块上。每次当我们修改时,我们需要重新编译整个模块(可能我只改了Dao包的某个实现类,但在编译的时候会把整个模块都编译一遍)。
如果是分模块的话,我们直接到模块下 mvn compile -Dmaven.test.skip=true
就完事了。
不过这只是一个方面,说服力好像也不太足。我认为最主要的是,我们分模块了以后可以复用
比如,现在我有austin
这个项目,此时为了对数据进行处理,我需要去新建对应的Flink
应用。可能受限于环境下,不会把flink相关的代码写在austin
项目下
(这也只是举了个例子,我想表达的是:一个成熟的项目往往不只有一个Git地址就覆盖了整个功能。在绝大多数时候,不同的功能都会分开到不同的项目上)。
那不同的项目下,很有可能需要做的事情是有重复的(比如我都需要去读数据库获取数据)。那这时候,分模块的好处就体现出来了:可以直接引入对应的jar包(比如support包和common包)。
那就不用在两个不同的项目上,写一模一样的代码了(:能够共用一套代码
有没有小伙伴好奇为什么api
和api-impl
是分了两个模块的吗?这里是为了:如果以后引入了RPC调用,那我们只需要提供api
模块出去就好了,api
模块的依赖一般很少。
(解决版本冲突是一件脏累活,人家嵌入你的SDK只是想用你的服务去获取对应信息,你别给人家整了一大堆毫无作用的依赖出来)
为什么GIT
到这里,项目的架子已经搭好了。我要把项目上传到Gitee跟大家愉快地玩耍(:
Git是一个版本控制工具。把austin
被Git管理后,我每次提交的内容都会被看到(:这在多人协作中尤其重要
除此之外,有了“版本”的概念以后,用Git可以随意回退版本(有后悔药吃
我当时刚出来实习的时候,那家公司用的是SVN(我当时对版本控制工具理解其实是很模糊的,反正在我当时看来,就是把写好的代码上传到中央服务器,只不过它能对比出每次修改的异同)
后来以后,在公司接触都是Git了(现在开发基本离不开Git了,这玩意本身还是比较好学的,用起来还是挺爽的)
顺便发一波我日常用到的Git命令吧:
-
git clone (克隆代码)
-
git checkout -b (新建分支)
-
git checkout (切换分支)
-
git add / git commit /git push (这几步我基本都是在IDE上用快捷键完成,很少自己敲命令)
-
git fetch (获取最新的修改信息)
-
git merge (合并代码)
-
git stash /git pop (有的时候临时会用,把代码放到暂存区中)
-
git reset --hard (代码写烂了,直接回退吧)
一般Git我是一半用命令行,一半用IDE集成的工具。总的来说,怎么舒服怎么来(没有限定说一定要用命令行,我是自己怎么操作比较快就怎么搞)
对于这个项目而言,我这里使用到Git最大的原因就是:有远程的仓库装载我的代码,并且你们能看到(:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/099bd56571d2ce594113aa88e9799bf2.jpeg)
最后
Java架构进阶面试及知识点文档笔记
这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理
Java分布式高级面试问题解析文档
其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
互联网Java程序员面试必备问题解析及文档学习笔记
Java架构进阶视频解析合集
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
互联网Java程序员面试必备问题解析及文档学习笔记
[外链图片转存中…(img-Adni2qMO-1712756730842)]
Java架构进阶视频解析合集
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!