什么是maven
maven翻译为“专家”,“内行”。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
Maven定义的工程构建生命周期
Maven的下载及安装
下载
Maven的官方网站:http://maven.apache.org/
使用的版本:apache-maven-3.0.5
Maven是使用java开发,需要安装jdk1.6以上,推荐使用1.8
Maven的安装步骤
第一步:安装jdk
第二步:把maven解压缩
第三步:配置环境变量MAVEN_HOME.
D:\temp\javaee18\apache-maven-3.0.5
第四步:在path中添加%MAVEN_HOME%/bin
第五步:测试
Mvn -v测试
创建maven项目
配置本地仓库的位置
默认位置:~/.m2/repository
修改本地仓库路径,需要修改settings.xml
全局配置:%MAVEN_HOME%/conf/settings.xml
用户配置:在新的maven仓库的位置复制一个settings.xml
Maven的核心概念
坐标、maven的依赖管理、生命周期、继承、聚合、插件。
坐标
groupId:定义当前Maven组织名称
artifactId:定义实际项目名称
version:定义当前项目的当前版本
packaging:定义该项目的打包方式,如果没有此项则默认为jar包。
常用的打包方式:jar、war、pom(只有一个pom文件)
依赖管理
就是项目中jar 包的管理。可以使用pom文件中定义jar包的坐标,管理依赖。
依赖的范围管理
1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
2.test:测试依赖范围。只对于测试classpath有效
3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
4.runtime:运行时提供。例如:jdbc驱动
如果不指定范围就是compile。对所有的classpath都生效。
依赖冲突
就近原则:如果本工程中配置jar包的版本和依赖传递过来的jar包的版本不一致,使用本工程配置的jar包版本。
本工程中配置同一个jar包的多个 版本,谁在后面配置使用谁。
可选依赖
在依赖的节点中添加一个optional选项,来确定此jar包是否向下传递,如果为true就不传递,如果为false就传递,默认为false。
<optional>true</optional>
排除依赖
当依赖以及传递到本工程中,我们不想要jar包。需要排除。
依赖基本概念
当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。例如:commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。通过第二个Maven工程我们已经看到,当前工程会到本地仓库中根据坐标查找它所依赖的jar包。
配置的基本形式是使用dependency标签指定目标jar包的坐标。例如:
<dependencies>
<dependency>
<!—坐标 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<!-- 依赖的范围 -->
<scope>test</scope>
</dependency>
</dependencies>
直接依赖和间接依赖
如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。
依赖的范围
当一个Maven工程添加了对某个jar包的依赖后,这个被依赖的jar包可以对应下面几个可选的范围:
①compile
[1]main目录下的Java代码可以访问这个范围的依赖
[2]test目录下的Java代码可以访问这个范围的依赖
[3]部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下
例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。
②test
[1]main目录下的Java代码不能访问这个范围的依赖
[2]test目录下的Java代码可以访问这个范围的依赖
[3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:对junit的依赖。仅仅是测试程序部分需要。
③provided
[1]main目录下的Java代码可以访问这个范围的依赖
[2]test目录下的Java代码可以访问这个范围的依赖
[3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:servlet-api在服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要。
④runtime[了解]
[1]main目录下的Java代码不能访问这个范围的依赖
[2]test目录下的Java代码可以访问这个范围的依赖
[3]部署到Tomcat服务器上运行时会放在WEB-INF的lib目录下
例如:JDBC驱动。只有在测试运行和在服务器运行的时候才决定使用什么样的数据库连接。
⑤其他:import、system等。
maven常用命令
注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必以通过参数来指定项目的目录。
- 打包:mvn package
- 编译:mvn compile
- 编译测试程序:mvn test-compile
- 清空(删除target目录下编译内容) mvn clean:mvn clean
- 运行测试:mvn test
- 生成站点目录: mvn site
- 生成站点目录并发布:mvn site-deploy
- 安装当前工程的输出文件到本地仓库: mvn install
- 安 装指定文件到本地仓库:mvn install:install-file -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=1.0.0 -Dpackaging=jar -Dfile=<myfile.jar>
- 查看实际pom信息: mvn help:effective-pom
- 分析项目的依赖信息:mvn dependency:analyze 或 mvn dependency:tree
- 打包时跳过测试: mvn -Dmaven.test.skip=true XX
- 生成eclipse项目文件: mvn eclipse:eclipse
- 生成idea项目文件: mvn idea:idea
组合使用
mvn clean install mvn clean compile mvn clean package