maven优缺点介绍及使用和特点

Maven是一款用于Java项目构建和依赖管理的自动化工具。它通过配置文件描述项目信息,提供项目结构规范,自动管理依赖并从仓库下载。Maven的优势包括便捷的依赖管理和项目拆分,但存在加载速度慢、文档不足、中央仓库元数据质量不高以及POM.xml复杂等问题。常见的Maven指令有:generate、compile、test、site、clean、package、install、deploy、eclipse。Maven的依赖范围包括compile、provided、runtime、test和system。其四大特性包括依赖管理、多模块构建、一致的项目构建和插件机制。

1.什么是maven:

maven是Java平台下的一款项目构建和依赖管理的自动化管理工具。

项目构建:将我们的源代码、配置文件变成可执行的war包或者jar包。

依赖管理:项目需要正常运行,必须依赖一些第三方的jar包,对于这些第三方的jar包的管理,可以认为就是依赖的管理。

Maven的作用主要体现在两个词上面:项目和管理。项目管理从技术上来理解,就是 Maven 为项目提供了一种让团队能够更科学地管理、构建项目的手段。我们可以用配置文件的方式对项目的描述、名称、项目版本号、项目依赖等信息进行描述,使我们的项目结构更加清晰。

  并且,有一些项目需要依赖一些第三方项目的模块或组件来完成,那么 Maven 则提供了一种 Maven仓库 的概念。将这些依赖全部放到 Maven仓库中,其他项目如果想要使用这些依赖,直接到仓库中取即可,避免了到开源网站下载 jar 包资源的步骤。

Maven的优点:

1、原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。

2、原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载。

3、原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。

4、原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。

缺点:
1.由于需要下载,导入等,导致加载缓慢,或者出现错误,和不稳定
2.缺少对Maven的文档描述(网上一大堆,但是没有标准)
3.中央存储库中的元数据不佳
4.POM.xml做为项目元数据的来源

maven常见的指令:

mvn archetype:generate :创建 Maven 项目

mvn compile :编译源代码

mvn test-compile :编译测试代码

mvn test : 运行应用程序中的单元测试

mvn site : 生成项目相关信息的网站

mvn clean :清除目标目录中的生成结果

mvn package : 依据项目生成 jar 文件

mvn install :在本地 Repository 中安装 jar

mvn deploy:将jar包发布到远程仓库

mvn eclipse:eclipse :生成 Eclipse 项目文件

maven依赖范围

  • compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

  • provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,打包:比如:servlet-api,jsp-api 被 tomcat 容器提供。

  • runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。

  • test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以 test范围依赖不会被打包。

  • system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。

maven四大特性:

1.第一大特性:依赖管理系统

 maven为java世界引入了一个新的依赖管理系统jar包管理jar升级时修改配置文件即可,在java世界中,可以用groupid,artifactid,version组成的Coordination(做标)唯一标识一个依赖。

 任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是jar包,也可以是war包或者jar包。

①groupId:定义当前Maven项目隶属的实际项目--公司名称。

②artifactId:该元素定义实际项目中的一个Maven模块--项目名。推荐的做法是使用实际项目名称作为artifactId的前缀。比如:spring-bean,spring-webmvc等。

③version:该元素定义maven项目当前所处的版本。

2.第二大特性:多模块构建

项目复查时dao  service  controller  层分离将一个项目分解为多个模块已经是很通用的一种方式。

在maven中需要定义一个parent  POM作为一组module的聚合POM,在该POM中可以<modules>标签来定义一组子模块,parent POM不会有什么实际构建产生。而parent POM中的build配置以及依赖配置都会自动继承给子module。

3.第三大特性:一致的项目构建 主要解决了我们在idea中和eclipse中创建的项目,目录可能不一样,但是如果使用了maven后,我们创建的项目目录都是一样的。 Maven在设计之初的理念就是Conversion over configuration(约定大于配置) ,其制定了一套项目目录结构作为标准的java项目结构,解决不同ide带来的文件目录不一致问题。

4.第四大特性:一致的构建模型和插件机制如果我们需要tomcat服务器的时候,我们就把tomcat服务器的引进来。

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:文件夹,jarwar文件,mavenProject:一个项目,可以放jarwar包,通过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(目录)下面的jarwar重新编译 如果出现以上情况,说明下载的jar包有问题,把这下面的文件删除,重新下载 每创建一个项目,都有pom.xml,所有的配置都在pom.xml中 网址:所有的groupIdartifactId到这个网站中找 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,文件夹,放了apiimpl的项目 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值