Maven

Maven是什么?

Maven 是一个项目管理和整合工具,Maven 为开发者提供了一套完整的构建生命周期框架。开发团队花较少时间就能够自动完成工程的基础构建配置。
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。

为什么使用Maven

1.简化构建过程
2.提供统一的构建系统
3.提供优质的项目信息
4.提供最佳实践开发指南
5.允许透明迁移到新功能

约定优于配置

Maven 使用约定而不是配置,意味着开发者不需要再自己创建构建过程。
开发者不需要再关心每一个配置细节。Maven 为工程提供了合理的默认行为。当创建 Maven 工程时,Maven 会创建默认的工程结构。开发者只需要合理的放置文件,而在 pom.xml 中不再需要定义任何配置。

Maven-POM

POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。
POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。
POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。能够在 POM 中设置的一些配置如下:
project dependencies
plugins
goals
build profiles
project version
developers
mailing list

Maven的目录结构

1、顶级目录结构
    src:该目录主要存放的是项目的源代码文件。
    target:该目录是项目编译后产生的一个目录,主要存放的是编译后的.class文件。
    pom.xml:该文件是Maven项目的核心配置文件,配置jar包的坐标信息。
  2、src目录结构 
    mian:该目录下存放的是该项目的主要代码文件,下面有三个文件夹,分别用来存放:
      Java:该目录用来存放Java的源代码文件
      resources:该目录主要用来存放项目的一些配置文件(比如spring的xml配置文件)。
      webapp:该目录相当于web项目下webcontent的目录,用来存放js、jsp、web.xml等文件.
    test:该目录用来存放项目的测试文件
      Java:该目录主要存放该项目的测试所用的Java源代码。
      resources:该目录存放测试使用的资源文件。

Maven的构建生命周期

什么是构建生命周期
构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序。这里的阶段是生命周期的一部分。
举例说明,一个典型的 Maven 构建生命周期是由以下几个阶段的序列组成的:
阶段 处理 描述
prepare-resources 资源拷贝 本阶段可以自定义需要拷贝的资源
compile 编译 本阶段完成源代码编译
package 打包 本阶段根据 pom.xml 中描述的打包配置创建 JAR / WAR 包
install 安装 本阶段在本地 / 远程仓库中安装工程包
当需要在某个特定阶段之前或之后执行目标时,可以使用 pre 和 post 来定义这个目标。
当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。Maven 有以下三个标准的生命周期:
clean
default(or build)
site

maven坐标

maven的坐标包括:groupId、artifactId、version、packaging、classifier
groupId:
1.定义当前maven项目隶属的实际项目。注意:当前maven项目与实际项目不一定是一对一的,一个项目会被分为多个模块,如SpringFramework中,对应maven项目有spring-core、spring-context等。
2.groupId不应该对应项目隶属的组织或公司。因为一个组织会有多个项目。
3.表示方式与JAVA包名一致,常与域名一一对应。
artifactId
1.定义实际项目中的一个maven项目(模块)。常用“实际项目名-模块名”做名称,方便寻找实际构建。
2.默认情况,maven生成的构建,文件名会以artifactId作为开头。
version:
1.定义maven项目当前所处的版本。需要注意的是,Maven定义了一套完成的版本规范,以及快照(SNAPSHOT)的概念。
packaging:
1.定义maven项目的打包方式,与文件拓展名对应,默认为jar。
2.打包方式会影响构建的生命周期。
classifier:
1.帮助定义构建输出的一些附属构件。附属构件与主构件对应。如主构件为a-2.0.0.jar,其可能通过一些插件生成如a-2.0.0-javadoc.jar等附属构件,包含Java文档
2.附属构件也有自己的唯一坐标
3.不能直接定义项目的classifier,因为负数构建不是项目直接默认生成的,而是由附加的插件帮助生成
以上五个元素,groupId、artifactId、version是必须定义的,packing是可选的,而classifier不能直接定义。

Maven的依赖传递

在项目往往需要引入多个依赖, 而引入的依赖又会引入其他的依赖。
有了Maven的传递性依赖机制,不用担心引入多余的依赖。 Maven会解析各个直接依赖的POM, 将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
例如: 项目中引入了spring-core依赖, 而spring-core又依赖commons-logging。因为项目直接引入了spring-core依赖,则spring-core为项目的第一直接依赖, 而因为spring-core引入了commons-logging依赖, 则commons-logging为项目的一个传递性依赖。

Maven仓库

什么是 Maven 仓库?
在 Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。
Maven 仓库有三种类型:
本地(local)
中央(central)
远程(remote)
本地仓库
Maven 本地仓库是机器上的一个文件夹。它在你第一次运行任何 maven 命令的时候创建。
Maven 本地仓库保存你的工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库的关键概念:
这个仓库由 Maven 社区管理。
不需要配置。
需要通过网络才能访问。
要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。

远程仓库
如果 Maven 在中央仓库中也找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

Maven常用命令

Maven常用命令:

  1. 创建Maven的普通java项目:
    mvn archetype:create
    -DgroupId=packageName
    -DartifactId=projectName
  2. 创建Maven的Web项目:
    mvn archetype:create
    -DgroupId=packageName
    -DartifactId=webappName
    -DarchetypeArtifactId=maven-archetype-webapp
  3. 编译源代码: mvn compile
  4. 编译测试代码:mvn test-compile
  5. 运行测试:mvn test
  6. 产生site:mvn site
  7. 打包:mvn package
  8. 在本地Repository中安装jar:mvn install
  9. 清除产生的项目:mvn clean
  10. 生成eclipse项目:mvn eclipse:eclipse
  11. 生成idea项目:mvn idea:idea
  12. 组合使用goal命令,如只打包不测试:mvn -Dtest package
  13. 编译测试的内容:mvn test-compile
  14. 只打jar包: mvn jar:jar
  15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
    ( -skipping 的灵活运用,当然也可以用于其他组合命令)
  16. 清除eclipse的一些系统设置:mvn eclipse:clean
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值