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 本地依赖,不建议使用

表格显示如下:
Apache Maven入门
(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