Maven简介
定义:maven是一个通过配置依赖关系进行自动化构建的工具,并且能够有效管理jar包。
基本原理
工程通过依赖文件(pom.xml)的规则去引用(jar包没有复制到工程目录内,只是一个jar包路径的引用)仓库内的jar包,在有外网的情况下,
本地仓库中找不到的jar包会从中央仓库去下载。
说明:
①私服用于局域网内,为局域网内的所有用户提供jar仓库,通过配置,用户先去访问私服,私服中没有找到的话,私服会作为代理去中央仓库
下载到私服。应用于:一个公司内开发团对,便于统一管理各开发人员使用的jar包
②仓库镜像就是一个远程仓库的一个映射仓库,在国内来说,意义上相当于代理的作用。比如中央仓库因为服务器在国外,又因为某些不可描述的
原因,所以国内开发人员从中央仓库中下载的依赖包会因为各种各样的网络因素导致错误或则下载十分缓慢。所以这时候镜像的作用的显现出来了。
可以说,镜像就是国外公共仓库的网络加速器,也可以说镜像是国外仓库在国内的版本。(原文: )
pom坐标
定义:通过groupId、artifactId、version等参数去定位仓库中jar包的位置.
如:
<dependency>
<groupId>com.ljm.maven</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
上面依赖中有坐标和作用范围,范围为测试阶段有效
本地仓库默认位置为 C:\Users\Administrator\.m2\repository
修改本地仓库位置(可选):通过配置maven根据内的settings.xml文件内容
我的仓库位置:<localRepository>H:\server\repository</localRepository>
根据三个参数groupId、artifactId、version可以得到jar在仓库中位置:
仓库位置/com/ljm/maven/junit/4.0/junit-4.0.jar
目录结构
安装maven
①官网下载一个maven压缩包,解压到本地(我用的是3.6.0)
②配置maven环境变量
右键我的电脑->点击属性
建议设置在用户变量中
1.新建一个变量名为M2_HOME(也可以用MAVEN_HOME,但是M2_HOME能够兼容老版本),值为maven的安装目录,
我的是:H:\server\apache-maven-3.6.0
2.在Path中添加maven下bin的路径,我的:H:\server\apache-maven-3.6.0\bin
3.配置完成
③检查安装结果:
命令窗口输入mvn -v , 产生如下结果表示安装成功
应用maven
准备工作
①配置maven项目自动创建的jre版本(默认是JavaSe-1.5)
配置maven安装目录apache-maven-3.6.0\conf下的settings.xml文件,添加如下配置(不能重复相关配置)
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>
配置完成后创建的maven工程会自动创建JavaSe-1.5,如下:
②eclipse中添加创建maven工程的快捷方式(默认没有)
勾选
完成后即可在创建时看到创建maven项目的选项
③配置eclipse中默认使用的maven工具(eclipse默认使用自带的maven插件)
点击windows ,再点击preferences
创建过程
JavaSE的maven工程
创建maven project
工程建立后,产生pom坐标(在pom.xml中):
JavaWeb的maven工程
创建过程与JavaSE的maven工程创建过程基本相同,有几个地方应该注意:
①packaging选择war
② JavaWeb的maven工程默认的目录结构不是我们常用的web目录格式,需要进行配置:
默认创建的目录
配置后的web目录
配置步骤:
右键工程名---点击Propertise---然后如下
ok后点击apply,需要更新一会后,目录webapp下结构发生变化
操作过程
maven依赖范围
maven几种常用性质
①依赖传递
- 只有compile范围内的依赖可以传递
- 可传递的依赖在最底层声明一次即可,高层会自动引入(下图解释)
②依赖排除:不希望得到传递的jar包
方法如下:
例如,在当前工程的pom.xml中,需要依赖servlet-api-2.5.jar,但是不想要servlet-api-2.5.jar依赖的commons-ligging.jar(阻止它传递)
③依赖原则
路径就近原则:
路中可以看出log4-1.2.17.jar由B依赖,工程B离工程C更近,所以工程C在二者中选择了引入依赖log4-1.2.17.jar
说明图:
实践图:
声明顺序优先原则:
后声明的依赖优先。如图:
对同一类jar包,后声明的依赖会覆盖先声明的依赖
拓展:在一个pom.xml中可以声明一个全局变量来统一管理,例如:
④继承
通过父工程对子工程的jar包统一管理,保证一致性。
解决方案:在父工程中统一规定jar包依赖。
第一步:以pom方式创建maven项目
第二步:父工程中统一规定依赖,子工程中取消版本号和重复的语句
<!-- 父工程pom.xml中配置-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 子工程pom.xml中配置-->
<parent>
<groupId>com.ljm.maven</groupId>
<artifactId>project03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../project03/pom.xml</relativePath> //父工程pom.xml相对该文件的位置
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
配置后效果:
⑤聚合
以pom方式对多个模块统一安装,安装后会存入本地仓库
- 以pom方式创建maven项目
- 在用户指定的父工程中进行一键打包
聚合配置:在父工程的pom.xml指定需要聚合的工程即可
<modules>
<module>../project01</module>
<module>../project02</module>
</modules>
启动一键安装:右键父工程的pom.xml文件,点击run as ,再选择maven install
部署方式(步骤较多,大致思路)
手动部署:
将整个web工程打包为war文件,然后移到tomcat的webapps目录下,最后用命令启动tomcat即可。
eclipse自动部署
通过eclipse工具,自动发布到tomcat服务器上即可
maven自动部署
用maven部署在工程中pom.xml配置以下代码:
<build>
<finalName>AtguiguWeb</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.2.3</version>
<configuration>
<container>
<containerId>tomcat6x</containerId>
<home>D:\DevInstall\apache-tomcat-6.0.39</home>
</container>
<configuration>
<type>existing</type>
<home>D:\DevInstall\apache-tomcat-6.0.39</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>
用maven在eclipse上进行自动部署时,只能开启服务器,不能直接关闭(需要另外用命令窗口关闭)。
不建议使用,因为eclipse部署比较方便。