Maven知识小结

一、为什么使用Maven
1、拆分项目管理

一个项目就是一个工程,如果项目有很多模块,而每一个模块就对应一个工程,可以借助Maven将一个项目拆分成多个工程


2、管理jar仓库
现在每个企业的开发项目都是比较大的,而这时就需要很多的jar包,有了Maven就无需手动去“复制”、“粘贴”到对应的WEB-INF/lib目录下了,借助Maven,可以将jar仅仅保存在“仓库”中,对有需要使用的工程“费用”这个文件接口,并需要真的把jar包复制过程,这样工程就不会显得很臃肿了的


3、jar包统一规范使用
不同技术的官网会提供的jar包可能会是五花八门的,还有的就是有些技术网站是通过Maven或SVN等专门的工具来提供下载的,如果方式不一样,那jar也不一定规范,借助Maven可以以一种规范的方式下载jar包,因为所有知名度框架或第三方工具的jar包都按照统一的规范存放在了Maven的中央库中


4、jar包依赖管理
FileUpload组件-》IO组件。commons-fileupload-1.3.jar依赖commons-io-2.0.1.jar。Maven可以帮助引进一些需要依赖的jar包。


二、Maven是什么
1、Maven是一款服务于Java平台的自动化构建工具

构建工具都有如下的:
Make->Ant->Maven->Gredle
2、构建的概念
以“Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片”等资源为“原料”去“生产”一个可以运行的项目的过程,步骤如下:
编译->部署->搭建
编译:Java源文件(User.java)->编译->Class字节码文件[User.class]->交给JVM去执行
部署:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译”的结果
构建过程的各个环节:
[1]清理:将以前的编译得到的旧的class字节码文件删除,为下一次编译做准备
[2]编译:将Java源程序编程成.class字节码文件
[3]测试:自动测试,自动调用junit程序
[4]报告:测试程序执行的结果
[5]打包:动态web工程打war包,Java工程打包jar包
[6]安装:Maven特定的概念->将打包得到的文件复制到“仓库”中指定的位置
[7]部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
自动化构建
3、安装Maven核心程序
1)检查JAVA_HOME环境变量
C:\Users\admin>echo %JAVA_HOME%
2)解压Maven核心程序包,放到指定目录,如:D:\develop\maven\apache-maven-3.5.0
3)配置Maven相关环境变量
[1]MAVEN_HOME环境变量
D:\develop\maven\apache-maven-3.5.0
[2]配置path环境变量
在path后面的变量加:;%MAVEN_HOME%\bin
[3]验证:运行mvn -v或mvn -verson命令查看



4、Maven核心概念
[1]约定的目录结构
[2]POM
[3]坐标
[4]依赖
[5]仓库
[6]生命周期/插件/目标
[7]继承
[8]聚合
5、常用Maven命令
[1]注意:执行与构建过程相关的Maven命令,必须进入到pom.xml所在的目录。
与构建过程相关的有:编译、测试、打包、安装、部署等。
[2]常用命令
mvn clear :清理
mvn compile :编译主程序
mvn test-compile :编译测试程序
mvn test :执行测试
mvn package :打包
mvn install :安装
mvn site :生成站点
6、关于连网问题
[1]Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中。
[2]当我们执行Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。
[3]本地仓库的默认位置:[系统当前登录用户的家目录]\.m2\repository
[4]Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央库下载。
[5]如果此时无法连接外网,则构建失败。
[6]修改默认仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件
修改办法:找到Maven解压目录\conf\setting.xml
<localRepository>D:\develop\maven\m2\repository</localRepository>
7、POM
[1]含义:Project Oject Model项目对象模型
DOM Document Object Model文档对象模型
[2]pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件进行配置
8、坐标
[1]Maven的坐标
使用如下的三个向量在仓库中唯一定位一个Maven工程
goupid:公司或组织域名倒序+项目名
如:<groupId>com.weisg.maven</groupId>
artifactId:模块名
<artifactId>Hello</artifactId>
version:版本
<version>0.0.1-SNAPSHOT</version>
[2]Maven工程的坐标与仓库中的路径对应的关系
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>4.3.10.RELEASE</version>
</dependency>
org/springframework/spring-core/4.3.10.RELEASE/spring-core-4.3.10.RELEASE.jar
如我的:D:\develop\maven\m2\repository\org\springframework\spring-core\4.3.10.RELEASE\目录下
9、仓库
1)仓库的分类
[1]本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
[2]远程仓库
(1)私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
(2)中央仓库:架设在Internet上,为全世界所有Maven工程服务
(3)中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度
2)仓库中保存的内容:Maven工程
[1]Maven自身所需要的插件
[2]第三方框架或工具的jar包
[3]我们自己开发的Maven工程
10、依赖[认识]
1)Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。
对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入到指定的仓库中。
2)依赖的范围
[1]compile范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
是否参与部署:参与
典型例子:spring-core
[2]test范围依赖
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例子:junit
[3]provided范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例子:servlet-api.jar

11、生命周期

1)各个构建环境执行顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
2)Maven的核心程序中定义了抽象的生命周期,生命周期,生命周期中各个阶段的具体任务是由插件来完成的。

3)Maven核心程序为了更好的实现自动化构建,按照这个特点执行生命周期中的各个阶段:不论现在执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行的。

mvn compile

maven-resources-plugin:2.6:resources

maven-compiler-plugin:3.1:compile

mvn test

maven-resources-plugin:2.6:resources

maven-compiler-plugin:3.1:compile

maven-resources-plugin:2.6:testResources

maven-compiler-plugin:3.1:testCompile

maven-surefire-plugin:2.12.4:test

测试报告

mvn package

maven-resources-plugin:2.6:resources

maven-compiler-plugin:3.1:compile

maven-resources-plugin:2.6:testResources

maven-compiler-plugin:3.1:testCompile

maven-surefire-plugin:2.12.4:test

测试报告

maven-jar-plugin:2.4:jar


12、在Eclipse中使用Maven
1)Maven插件:Eclipse内置
2)Maven插件的设置
[1]installations:指定maven核心程序的位置,不建议使用Eclipse自带的maven程序。
[2]user settings:指定conf/settings.xml的位置,方便获取本地仓库的位置
3)基本操作
[1]创建maven版的Java工程
[2]创建Maven版的Web工程
[3]执行Maven命令
13、依赖[深入]
1)依赖的传递性
[1]好处:可以传递的依赖不必在每个模块工程中都重复声明,在“最下面”的工程中依赖一次即可。
[2]注意:非compile范围的依赖不能传递。所以在各个工程模块中,如果需要就得重复声明依赖。
2)依赖的排除
[1]需要设置依赖排除的场合
[2]依赖排除的设置方式
exclusions
3)依赖的原则
[1]作用:解决模块工程之间的jar包冲突问题
[2]验证路径最短优先原则,验证路径相同时先声明者优先
4)统一管理依赖的版本
建议配置方式,使用properties标签内使用自定义标签统一声明版本号
14、继承
15、聚合

1)作用:一键安装各个模块工程。
2)配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块
利用标签modules

3)使用方式:在聚合工程的pom.xml上点击右键->run as ->maven install


特殊配置:

<!-- 配置当前工程构建过程中的特殊设置 -->
<build>
<finalName>AtguiguWeb</finalName>

<!-- web项目执行mvn deploy命令时必须要配置的,不然会报错 -->
<!-- 配置构建过程中需要使用的插件 -->
<plugins>
<plugin>
<!-- cargo是一家专门从“启动Servlet容器”的组织 -->
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.6.4</version>

<!-- 针对插件进行的配置 -->
<configuration>
<!-- 配置当前系统中容器的位置 -->
<container>
<containerId>tomcat8x</containerId>
<home>D:\develop\tomcat\apache-tomcat-8.0.29-practice</home>
</container>
<configuration>
<type>existing</type>
<home>D:\develop\tomcat\apache-tomcat-8.0.29-practice</home>
<!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
<!-- <properties>
<cargo.servlet.port>8989</cargo.servlet.port>
</properties> -->
</configuration>
</configuration>

<!-- 配置插件在什么情况下执行 -->
<executions>
<execution>
<id>cargo-run</id>

<!-- 生命周期的阶段 -->
<phase>install</phase>
<goals>
<!-- 插件的目标 -->
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>


最后在命令窗口里执行:mvn deploy 

这个部署一定要到项目的pom.xml所在的目录如,如 :E:\WorkSpace\eclipse\workspace\ssh-web

如果在Eclipse执行,最后关不了,会有窗口占用的情况

如下的这个插件配置可以在web项目中使用,这样打包war的时候就可以把依赖的jar包打到lib下了

<plugin>   
   <artifactId>maven-dependency-plugin</artifactId>   
       <executions>   
       <execution>   
           <phase>install</phase>   
           <goals>   
               <goal>copy-dependencies</goal>   
           </goals>   
           <configuration>   
               <outputDirectory>${project.build.directory}/lib</outputDirectory>   
           </configuration>   
       </execution>   
   </executions>   
</plugin>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值