使用Maven代替传统JavaEE项目吧

传统JavaEE项目

Jar包问题

当我们创建一个JavaEE项目时,就需要使用一些第三方依赖jar,比如数据库连接的,连接池的,单元测试的,json,xml解析的等等。而且很多都是重复的。以我之前写的项目为例。

电脑端

image-20201021222858223

微信端

image-20201021222934232

之前按照电脑端和微信端将项目拆分成了两个子项目,技术栈都是一致的,但是我们发现了jar包都是重复的。看了一下,还是不小的(项目大小是18M,这些重复的jar包就占用了一半的磁盘)。

image-20201021223114775

我们知道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,微信端也要进行重复操作。

微信端

image-20201021224428980

电脑端

image-20201021224519818

我们看到其实有一些工具类是重复的,但是我们是两个项目,只能面向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本地都有,那么就不用联网了!

image-20201021225647864

如果,这是我电脑上的本地仓库。

image-20201021230029643

搜索一下,我们的jar包都放在这里

image-20201021230121076

我们在pom.xml选中我们junit的版本,公司名,作用域等信息就可以愉快的使用了。由于没有把jar直接拿过来,所以我们的项目比普通的JavaEE项目磁盘占用要小一些。

image-20201021230220060

Maven是如何进行模块管理的

后期我们会进行模块拆分,之前的还是微信端和电脑端进行拆分,这里我们可以把微信端的各个功能再拆分为独立的模块,最后我们通过Maven进行管理,具体实现细节以后有机会再讲

image-20201021230442665

1.[今日课程内容总览] Maven--***** 介绍 优点 用maven创建一个项目, 用maven创建一个ssm项目,每一层的代码分开,把一个项目拆解成多个项目 2.[今日包含笔记] maven介绍: Eclise: 缺点: Jar包: 版本管理,解决jar包冲突:删除老的jar包,保留新的jar包 不同的项目,jar包要复制一份;Users Library 羡慕yum的好处,安装软件,自动下载,自动验证,自动安装,自动测试;镜像网站 Jar包的依赖: 致命的缺点:现象: 每一个项目都有前台(广大网民)和后台(管理员看的),后台的功能远远的大于>前台的功能;迭代升级;每次升级都要重启tomcat;将tomcat做很多个备份(10个),为了nginx转发;前台:访问比较大,管理员访问比较小; 问题: 每次升级,10个tomcat都升级一次 后台的升级频繁要比前台频繁;升级10次,9次改的是后台的代码,只有一次是前台的代码 解决方案: 是将前台(广大网民看的页面)的代码和后台(管理员)的代码要分开,将原来的一个项目分别放到两个web项目;一个web项目一个tomcat;好处:更新的时候如果更新后台(管理员),只需要重启后台的tomcat(服务); 折成两个项目以后的缺点:Service以下的代码重复; 将Service层以下的代码放到一个新创建的java项目中,在部署的时候将Service(java项目)打成一个jar包,分别放到两个web服务中;编译的时候让web项目依赖与Service(java项目)_source folder;配置麻烦,项目项目之间的依赖头脑得相当清晰 这个缺点Maven解决了; 请听今天的内容 拆分前:图一 拆分后是图二 3. 介绍 官网:http://maven.apache.org/download.cgi 目录介绍: Bin:二进制文件 Boot:引导,启动 Conf:配置文件 Lib:jar包 README.txt:读我 3.1.修改配置文件的内容 路径:%MAVEN_HOME%\conf\settings.xml 配置文件代码: d:/repo alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central 注意: 千万不要将文档中的setting的内容全部替换到maven中的内容,要对比着修改,保留原来的; 只修改本地仓库,和下载镜像(源) 3.2.Eclipse Maven的配置 每打开一个新的工作空间,要配置一下Maven,然后再写代码 3.3.创建Maven项目 右击创建一个maven project Packing:有三种: Jar:java项目, War:web项目 Pom:文件夹,jar和war文件,mavenProject:一个项目,可以放jar和war包,通过pom,一般新创建的maven Project是POM 3.4.创建一个Maven Model 最外面的项目MavenProject,其它的全部是Maven Model 3.4.1.创建JAR 目录介绍: Mvn-jar |-->Src:源码:java代码 |-->|-->main:代码:除测试以外的代码:junit |-->|-->main|-->java:代码 |-->|-->main|-->resources:配置文件 |-->|-->test:测试的代码,junit |-->|-->test|-->java:代码 |-->|-->test|-->resources:配置文件 |-->Target:编译后的文件 |-->|-->classes:代码编译后的class类 |-->|-->test-classes:测试类编译后的classes 3.4.2.创建WAR 目录介绍: Mvn-war |-->Src:源码:java代码 |-->|-->main:代码:除测试以外的代码:junit |-->|-->main|-->java:代码 |-->|-->main|-->resources:配置文件 |-->|-->main|-->webapp:webContent,一般放jsp,js,css |-->|-->test:测试的代码,junit |-->|-->test|-->java:代码 |-->|-->test|-->resources:配置文件 |-->Target:编译后的文件 |-->|-->classes:代码编译后的class类 |-->|-->test-classes:测试类编译后的classes |-->|-->m2e-wtp:编译后的web服务;war解压后的内容 创建war包以后报以下错误: 因为创建的web项目,webapps少了web-inf,web.xml 解决方案: 在项目上右击,Javaee Tools-->第二个选项 3.5.配置编译环境 将maven项目重新编译,在项目中右击,可以pom上右击,可以将pom(目录)下面的jar和war重新编译 如果出现以上情况,说明下载的jar包有问题,把这下面的文件删除,重新下载 每创建一个项目,都有pom.xml,所有的配置都在pom.xml中 网址:所有的groupId和artifactId到这个网站中找 http://mvnrepository.com/ Pom.xml:配置文件示例(含的编译环境) 4.0.0 com.bjsxt mvn 0.0.1-SNAPSHOT pom mvn mvn mvn-jar mvn-war org.apache.maven.plugins maven-surefire-plugin true org.apache.maven.plugins maven-compiler-plugin <!-- 3.6.1 --> 1.7 1.7 UTF-8 org.apache.maven.plugins maven-source-plugin true compile jar org.apache.maven.plugins maven-resources-plugin UTF-8 3.6.生命周期 Maven -build:javac;编译 Maven-install:java先编译,后运行 在项目的target中会生成jar包和war包, 在仓库中生成相应的目录,里面的放的是jar包和war包 Maven-clean:会把项目中的class文件和jar包war包删除 Maven-test:运行所的测试类,取决于位置,必须放到src/test下面;在运行的(install)跳过,运行的时候会执行一遍测试类(花的时间长) 4.创建一个标准的ssm项目 项目介绍: Ssm:项目的顶级目录 ssm_common:jar包,放的是原来src_common下面的代码 ssm_service:pom,文件夹,放了api和impl的项目 ssm_service_api:jar包,放的是所有Service的接口 ssm_service_impl:jar包,所有Service的实现类 ssm_service_back:管理员后台的web服务 ssm_service_head:前台的服务 凡是依赖:如果都是java项目,会将依赖的项目打成一个jar包放到classpath中, 如果是web项目,会将依赖的项目打成一个jar包,放到web-inf/lib中 特别的图 创建完以后如下图: 添加依赖 5.搭建ssm 5.1.创建数据库 5.2.创建项目:确定项目可以在tomcat上运行 5.3.添加Spring 添加jar包 添加JAR包 增加版本的常 在不同的项目中可以使用不同的版本-这种情况不允许 添加配置文件 写测试代码 如下图: 结论: ~将原来的原始的项目,变成maven项目 ~相同的代码,不同的环境,将项目跑起来 5.4.添加Mybatis 将service折成了两个项目:service-api,和service-impl Service-api;放的是Controller层使用到的对象;Service的接口引用,Util,POJO, Service-impl:放的是调用Dao层的对象; 目前来看:我们的web服务都依赖了api服务和impl服务,在将来引用dubbo的时候,web服务只依赖api服务,不依赖Impl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值