Maven学习笔记(一)

对于Maven一直都持工具主义的态度,在项目中边用边查,了解的知识是杂七杂八,毫无章法,没有一个系统的掌握。

今天抽时间来梳理一下,希望能够查缺补漏,起到一些好的效果。

这一篇是Maven基础知识,下节会介绍Maven的属性。

Maven介绍

Maven是Apache旗下一个纯Java开发的开源项目,基于项目对象模型(即我们熟悉的POM)概念。能管理一个项目的构建、报告和文档等步骤。

Maven能做什么

Maven可以用于构建和管理各种项目,不仅限于java,其他语言如C#、Ruby、Scala编写的项目也能够胜任。

Maven的功能

构建、依赖、文档生成、报告、发布、分发、邮件列表、SCMs(前两个我们每天都会用到应该很熟悉了)。

Maven的约定配置

Maven使用约定优于配置的原则,提倡使用一个标准的目录结构,如下

目录 目的
${basedir} 存放pom.xml和所有的子目录
${basedir}/src/main/java 项目的java源代码
${basedir}/src/main/resources 项目的资源,比如说property文件,springmvc.xml
${basedir}/src/test/java 项目的测试类,比如说Junit代码
${basedir}/src/test/resources 测试用的资源
${basedir}/src/main/webapp/WEB-INF web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
${basedir}/target 打包输出目录
${basedir}/target/classes 编译输出目录
${basedir}/target/test-classes 测试编译输出目录
Test.java Maven只会自动运行符合该命名规则的测试类
~/.m2/repository Maven默认的本地仓库目录位置

不用说,非常熟悉吧,一个标准Maven工程结构。

Maven的特点

  • 项目设置遵循统一规则
  • 任意工程中共享
  • 依赖管理自动更新
  • 依赖库庞大且不断增长
  • 可扩展,可以编写Java或脚本语言的插件
  • 基于模型构建
  • 向后兼容
  • 子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号
  • 并行构建:编译的速度能普遍提高20%~50%
  • 提供Maven wiki页面链接展示的错误报告

Maven与JDK对应关系

Maven版本 JDK版本
3.3 1.7及以上
3.2 1.6及以上
3.0/3.1 1.5及以上

Maven仓库

本地仓库

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件

在Maven配置文件settings.xml中指定本地仓库的位置。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
      <localRepository>C:/MyLocalRepository</localRepository>
</settings>
远程仓库

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

在pom.xml中指定远程仓库的位置。

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <dependencies>
      <dependency>
         <groupId>com.companyname.common-lib</groupId>
         <artifactId>common-lib</artifactId>
         <version>1.0.0</version>
      </dependency>
   <dependencies>
   <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>
</project>
中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。

中央仓库的关键概念:

  • 这个仓库由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

Maven依赖搜索顺序

  • 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
  • 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
  • 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
  • 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。