yeskery

Manven 介绍与基本使用

Maven 介绍

Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。

Maven是一个采用纯Java编写的开源项目管理工具。Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件,Maven可以管理项目的整个声明周期,包括编 译,构建,测试,发布,报告等等。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

Maven 和 Ant 的不同

Maven Ant
标准构建文件 project.xmlmaven.xml build.xml
特性处理顺序 ${maven.home}/bin/driver.properties ${project.home}/project.properties ${project.home}/project.properties ${project.home}/project.properties ${project.home}/project.properties ${project.home}/build.properties ${user.home}/build.properties 通过 -D 命令行选项定义的系统特性 最后一个定义起决定作用。 通过 -D 命令行选项定义的系统特性 由 任务装入的特性 第一个定义最先被处理。
构建规则 构建规则更为动态(类似于编程语言);它们是基于 Jelly 的可执行 XML。 构建规则或多或少是静态的,除非使用<script>任务。
扩展语言 插件是用 Jelly(XML)编写的。 插件是用 Java 语言编写的。
构建规则可扩展性 通过定义 <preGoal> 和 <postGoal> 使构建 goal 可扩展。 构建规则不易扩展;可通过使用 <script> 任务模拟 <preGoal> 和 <postGoal> 所起的作用。

Maven 的常用命令

  • mvn -version 查看 Maven版本
  • mvn archetype:generate 创建Maven项目
  • mvn compile 编译源代码
  • mvn deploy 发布项目
  • mvn test-compile 编译测试源代码
  • mvn test 运行应用程序中的单元测试
  • mvn site 生成项目相关信息的网站
  • mvn clean 清除项目目录中的生成结果
  • mvn package 根据项目生成的jar
  • mvn install 在本地Repository中安装jar
  • mvn eclipse:eclipse 生成eclipse项目文件
  • mvnjetty:run 启动jetty服务
  • mvntomcat:run 启动tomcat服务
  • mvn clean package -Dmaven.test.skip=true: 清除以前的包后重新打包,跳过测试类

Maven 的下载安装

下载地址

官网下载地址:http://maven.apache.org/release-notes-all.html

准备工作

Apache Maven 是使用纯 Java 开发的,因此需要提前安装好 Java 运行环境并设置好环境变量 JAVA_HOME

解压安装及设置

将下载好的 Maven 文件,解压到任意目录。

添加环境变量

  • Windows
    打开计算机属性 > 系统属性 > 高级 > 环境变量
    在系统变量中新建 M2_HOME 变量,值为解压的Maven目录
    修改系统变量 path,添加 %M2_HOME%\bin

  • Linux
    修改 /etc/profile 文件,在尾部添加以下内容:

    1. MAVEN_HOME=/usr/local/maven # Maven 解压路径
    2. export MAVEN_HOME
    3. export PATH=${PATH}:${MAVEN_HOME}/bin

    使用 source 命令更新环境变量

    1. source /etc/profile

使用 mvn -version 命令来验证是否安装成功

Maven 的基本配置

修改 Maven 本地库目录

默认位置

  • Windows:~/.m2
  • Linux:C:\Documents and Settings{用户名}.m2

修改配置文件 setting.xml,该文件默认在maven解压路径下的 conf 文件夹下,找到<localRepository>标签,取消其注释,修改本地库目录。

  1. <localRepository>/usr/local/maven-repository</localRepository>

修改中央仓库地址

修改配置文件 setting.xml,找到<mirror>标签,取消其注释,修改中央仓库地址。

  1. <mirror>
  2. <id>nexus-aliyun</id>
  3. <mirrorOf>*</mirrorOf>
  4. <name>Nexus aliyun</name>
  5. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  6. </mirror>

启用代理访问

修改配置文件 setting.xml,找到<proxy>标签,取消其注释,修改代理访问参数,启动代理访问。

  1. <proxy>
  2. <id>optional</id>
  3. <active>true</active>
  4. <protocol>http</protocol>
  5. <username>proxyuser</</username>
  6. <password>proxypass</password>
  7. <host>proxy.host.net</host>
  8. <port>80</port>
  9. <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
  10. </proxy>

Maven 的基本目录

Maven 的基本目录如下:

  1. src
  2. |----main
  3. |----|----java
  4. |----|----|----package
  5. |----test
  6. |----|----java
  7. |----|----|----package
  8. |----resources

Maven 创建目录的方式

  1. 手动创建上述目录结构
  2. archetype:generate 按照提示进行输入创建
  3. archetype:generate -DgroupId=${groupId} -DartifactId=${artifactId} -Dversion={version} -Dpackage={Dpackage}
    • DgroupId:组织名,一般是公司域名的反写
    • DartifactId:一般为 项目名-模块名
    • Dversion:版本名
    • Dpackage:项目的包名

Maven 生命周期

一个完整的项目构建过程包括:清理编译测试打包集成测试验证部署

Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。

Maven有三个相互独立的生命周期

  • Clean Lifecycle:在进行真正的构建之前进行一些清理工作;
    • pre-clean:执行清理前的工作
    • clean:清理上一次构建生成的所有文件
    • post-clean:执行清理后的文件
  • Default Lifecycle:构建的核心部分,编译,测试,打包,部署等等,包含:compile test package install 等命令;
  • Site Lifecycle:生成项目报告,站点,发布站点;
    • pre-site:在生成项目站点前要完成的工作
    • site: 生成项目的站点文档
    • post-site:在生成项目站点后要完成的工作
    • site-deploy:发布生成的站点文档到服务器上

运行任何一个阶段的时候,在它前面的所有阶段都会被运行,例如运行 mvn install 的时候,代码会被编译,测试,打包。

pom.xml

POM代表项目对象模型。它是 Maven 中工作的基本单位,这是一个 XML 文件。它始终保存在该项目基本目录中的 pom.xml 文件。

POM 包含的项目是使用 Maven 来构建的,它用来包含各种配置信息。

POM 也包含了目标和插件。在执行任务或目标时,Maven 会使用当前目录中的 POM。它读取POM得到所需要的配置信息,然后执行目标。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <!-- -->
  6. <!-- 指定当前pom的版本 -->
  7. <modelVersion>4.0.0</modelVersion>
  8. <!-- 域名反写 + 项目名 -->
  9. <groupId>com.yeskery.sprout</groupId>
  10. <!-- 项目名 + 模块名 -->
  11. <artifactId>sprout-core</artifactId>
  12. <!-- 版本名 -->
  13. <version>0.0.1-SNAPSHOT</version>
  14. <!-- 打包方式 默认为jar 其它值 war zip pom -->
  15. <packing>jar</packing>
  16. <!-- 项目描述名称 -->
  17. <name></name>
  18. <!-- 项目地址 -->
  19. <url></url>
  20. <!-- 项目描述 -->
  21. <description></description>
  22. <!-- 项目开发人员-->
  23. <developers></developers>
  24. <!-- 许可证 -->
  25. <licenses></licenses>
  26. <!-- 组织 -->
  27. <organization></organization>
  28. <!-- 子模块继承父模块 -->
  29. <parent></parent>
  30. <!-- 配置常量 -->
  31. <properties></properties>
  32. <!-- 依赖列表 -->
  33. <dependcies>
  34. <!-- 设置依赖是否可选 -->
  35. <option></option>
  36. <!-- 排除依赖传递列表 -->
  37. <exclusions></exclusions>
  38. <!-- 依赖 -->
  39. <dependency></dependency>
  40. </dependcies>
  41. <!-- 依赖的管理 -->
  42. <dependciesManagement></dependciesManagement>
  43. <!-- 构建 -->
  44. <build>
  45. <!-- 插件列表 -->
  46. <plugins></plugins>
  47. </build>
  48. <!-- 聚合多个模块 -->
  49. <modules></modules>
  50. <project>

依赖的 <scope> 设置

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <scope>test</scope>
  5. </dependency>

Maven 有三种范围的classpath

  1. 编译
  2. 测试
  3. 运行

通过 <scope> 的值,可以确定该依赖在什么阶段进行导入到classpath中。

<scope> 的值有以下几种:

  1. compile默认的范围,在编译测试运行范围下都有效;
  2. provided:在编译测试范围有效;
  3. runtime:在测试运行范围有效;
  4. test:只在测试范围有效;
  5. system:与本机系统相关联,可移植性差;
  6. import:导入的范围,只使用在<dependciesManagement>中,表示从其它pom中导入 dependcy 配置。

依赖冲突

在依赖设置中,经常会出先依赖冲突,尤其在通用工具类、日志类依赖中出现。

在Maven中,处理冲突有两个原则:

  1. 短路径优先原则
    1. A > B > C-1.0.jar
    2. A > C-1.1.jar
    在上述情况中,最终生效的依赖是C-1.1.jar
  2. 先声明优先原则
    1. A > B > C-1.0.jar
    2. A > B > C-1.1.jar
    在上述情况中,最终生效的依赖是C-1.0.jar

Maven 在 IDE 中的使用

Eclipse

在新版本的 Eclipse 中,已经内置了 Maven ,不需要额外的下载。

  • 设置 Maven 安装路径
    也可使用 Eclipse 自带 Maven 版本
    maven_eclipse_installations

  • 设置 Maven 本地配置
    maven_eclipse_user_settings

  • 创建项目
    maven_eclipse_create_project

  • 运行
    maven_eclipse_run

IntelliJ IDEA

在 IDEA 中,已经内置了 Maven ,不需要额外的下载。

  • 创建项目
    maven_idea_create

  • 设置 Maven 安装路径
    也可使用 IDEA 自带 Maven 版本
    maven_idea_setting

  • 运行
    maven_idea_run

  • 打包
    maven_idea_build

部分内容参考以下文章:

  1. https://baike.baidu.com/item/Maven/6094909
  2. http://juvenshun.iteye.com/blog/213959
  3. http://www.yiibai.com/maven/

评论

发表评论 点击刷新验证码

提示

该功能暂未开放