传统JavaEE项目
Jar包问题
当我们创建一个JavaEE项目时,就需要使用一些第三方依赖jar,比如数据库连接的,连接池的,单元测试的,json,xml解析的等等。而且很多都是重复的。以我之前写的项目为例。
电脑端
微信端
之前按照电脑端和微信端将项目拆分成了两个子项目,技术栈都是一致的,但是我们发现了jar包都是重复的。看了一下,还是不小的(项目大小是18M,这些重复的jar包就占用了一半的磁盘)。
我们知道jdk自带的jar包也很多,为什么不导入到lib里面呢?由于我们的jdk自带的jar都是通过classpath,也就是我们配置的环境变量,来寻找jar的。
优化思想
如果我们把这些重复的jar包都统一放进一个仓库进行管理,然后我们需要导入jar包时,再从这个仓库去拿,不需要把jar放在WEN-INF/bin目录下,只要指定我们需要的jar包的url地址,通过磁盘IO去读取jar包。
这样我们就把jar包和项目进行拆分了,此时如果我们更换了环境,将项目拷贝到领一台电脑上,那么我们的仓库又不能使用了。解决方法是,建立一个联网的平台,我们各自的设备可以去这个联网的平台同步jar到本地的仓库,这样就可以解决环境问题。
项目层级问题
还是举我之前的例子,由于电脑端和微信端之前是没有什么关系的,但是又是关系紧密的。电脑端无法访问到微信端,微信端也无法访问到电脑端。但是技术栈又是相近的,如果我们把项目写在一起,比如bean目录下即有微信端的POJO类,也有电脑端的POJO类,而且电脑端的用户类可能叫User,微信端也叫USER。而拆开来写又难以管理,比如电脑端更新了技术,更换了jar,微信端也要进行重复操作。
微信端
电脑端
我们看到其实有一些工具类是重复的,但是我们是两个项目,只能面向CV编程,但是又不能写在一起
优化思想
如果创建一个项目(这里称为父项目),该项目有很多的模块,各个模块之间不能相互访问,但是我们可以通过父项目对这些模块进行管理,可以规定这些模块使用的Jar包版本,甚至还能抽取重复的代码,减少代码冗余。
Maven概念
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具(来自百度百科)。
通俗点来讲就是一个专门管理java项目的项目管理工具,在学习之初,我把它当成是一个更高级的Eclipse来理解学习,当然大家也可以根据自己的学习方法来入手。
Maven作用
对比平常编写大项目大小,maven中的项目大小要小的很多,因为平常项目的中需要的jar包还是比较多的而且大的,而代码文件大小是很小的,maven将项目中的jar包进行统一管理,存放在默认的位置,也就是我们经常说的本地仓库中,所以项目大小就小了很多。
从maven的工作原理来讲,它有四个好处:
(1)依赖管理,也就是管理jar包(涉及仓库知识,下面会讲)
(2)一键构建,不再需要将项目发布到tomcat中再开启tomcat运行,可以直接在eclipse中创建maven项目,然后调用tomcat:run命令进行运行。
Maven是如何进行Jar包管理的
如图,首先我们的Maven团队提供了一个联网的平台,里面有全宇宙所以的jar,当然是发布的,你本地写的小demo也可以去申请。
我们每一个Maven项目都有一个核心配置文件pom.xml,里面会存放一些jar包的信息,比如要用什么jar包,什么版本,jar包是生产部署时使用还是测试环境使用,等等,然后我们去本地仓库寻找我们要的jar,如果没有就去Maven服务器下载,所以Maven是要联网的!!!但是如果Maven使用的jar本地都有,那么就不用联网了!
如果,这是我电脑上的本地仓库。
搜索一下,我们的jar包都放在这里
我们在pom.xml选中我们junit的版本,公司名,作用域等信息就可以愉快的使用了。由于没有把jar直接拿过来,所以我们的项目比普通的JavaEE项目磁盘占用要小一些。
Maven是如何进行模块管理的
后期我们会进行模块拆分,之前的还是微信端和电脑端进行拆分,这里我们可以把微信端的各个功能再拆分为独立的模块,最后我们通过Maven进行管理,具体实现细节以后有机会再讲