Apache Maven入门
Maven是什么
优秀的项目构建工具
maven是什么,maven是一个优秀的java项目构建工具。而构建是什么,就是通常我们工作中常常要做的那些繁琐的事,如编译、单元测试、打包、部署等等。
为什么使用Maven
使用maven创建项目,具体的创建过程都由maven内部实现,使得凡是使用它构建的项目基本结构都是一样的,这样统一了风格之后便更利于团队的开发效率。
拥有约定,知道你的代码在哪里,放到哪里去。
拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程。
只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情。
拥有依赖管理,仓库管理 。
Maven的目录结构
1、*目录结构
src:目录是源代码和测试代码的根目录
target:目录由Maven创建。它包含所有编译的类,JAR文件等。当执行 mvn clean 命令时,Maven将清除目标目录。
pom.xml:该文件是Maven项目的核心配置文件,配置jar包的坐标信息。
2、src目录结构
mian:该目录下存放的是该项目的主要代码文件,下面有三个文件夹,分别用来存放:
Java:该目录用来存放Java的源代码文件
resources:该目录主要用来存放项目的一些配置文件(比如spring的xml配置文件)。
webapp:该目录相当于web项目下webcontent的目录,用来存放js、jsp、web.xml等文件 ,webapp目录包含 WEB-INF 目录。
test:该目录用来存放项目的测试文件
Java:该目录主要存放该项目的测试所用的Java源代码。
resources:目录包含您项目所需的资源。
Maven的构建生命周期
生命周期(lifecycle)由多个阶段(phase)组成,每个阶段有一个或多个目标(goal),一个目标是mvn的最小任务单元,简化的默认生命周期从校验到部署如下
校验 - 初始化 - 编译 -测试 -打包 - 集成测试 -安装-部署
validate-initialize-compile-test-package-integrationTest-install-deploy
Maven坐标
使用下面的三个向量在仓库中唯一定位一个Maven工程
1)groupId 公司的域名反写 com.woniuxy.cq
2)artifactId 项目名 rocket
3)version 版本 SNAPSHOT(快照版本) rc RELEASE GA milestone
Maven依赖
(1)依赖范围:
compile 默认,对于编译,测试,运行三个状态都有效
test 顾名思义,只针对执行test代码
provided 对于编译和测试时有效,但运行时无效,典型的时servlet-api,运行时这个由容器来提供
runtime 对测试和运行时有效,但编译时无效
system 本地依赖,不建议使用
表格显示如下:
(2)依赖传递
只有编译时和运行时依赖是传递的
A->B->C(0.2)
A->C(0.1)
最短路径原则:C(0.1)
A->B->C(0.2)
A->D->C(0.1)
优先声明原则:C(0.2)
(3)依赖排除
在写pom的时候,我们写的一个依赖往往会依赖于其他的包,而这些包可能是过时的不安全的,因此需要排除并重新引用安全的版本,先在依赖这个项目的pom中去除想排除的依赖,再添加指定版本的依赖。
Maven仓库
在 Maven 的术语中,仓库是一个位置(place)。
Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 仓库有三种类型:
本地(local)
*(central)
远程(remote)
本地仓库:当前电脑上部署的仓库项目,为当前电脑上所有的Maven工程服务。
私服是一种特殊的远程仓库因为他是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的maven用户使用。
*仓库是maven公司提高的最大的仓库,里面拥有最全的jar包资源,所以私服上也没有的时候就会去*仓库找,因为*仓库是外网下载速度慢,所以我们需要搭建自己的私服。
**
Maven常用命令
**
创建Maven的普通java项目:
mvn archetype:create
-DgroupId=packageName
-DartifactId=projectName
创建Maven的Web项目:
mvn archetype:create
-DgroupId=packageName
-DartifactId=webappName
-DarchetypeArtifactId=maven-archetype-webapp
编译源代码: mvn compile
编译测试代码:mvn test-compile
运行测试:mvn test
打包:mvn package
在本地Repository中安装jar:mvn install
清除产生的项目:mvn clean
编译测试的内容:mvn test-compile