Maven 入门与使用

MAVEN

1. 概述

  • Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency
    Management
    System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
  • Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven
    运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
  • 此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。

2. 安装MAVEN

  • 检查JAVA_HOME环境变量

    C:\Users\我超爱学习啊>echo %JAVA_HOME%
    C:\Program Files\Java\jdk1.8.0_151
    
  • 解压MAVEN安装包,安装在非中文无空格路径

    F:\apache-maven-3.5.2
    
  • 配置MAVEN相关环境

    • MAVEN_HOME或M2_HOME

      F:\apache-maven-3.5.2   
      
    • path

      F:\apache-maven-3.5.2\bin
      
  • cmd中运行mvn -v命令查看

    C:\Users\我超爱学习啊>mvn -v
    Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
    Maven home: F:\apache-maven-3.5.2\bin\..
    Java version: 1.8.0_151, vendor: Oracle Corporation
    Java home: C:\Program Files\Java\jdk1.8.0_151\jre
    Default locale: zh_CN, platform encoding: GBK
    OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
    

3. 约定目录结构

①根目录:工程名
②src目录:源码
③pom.xml文件:MAVEN工程的核心配置文件
④main目录:存放主程序
⑤test目录:存在测试程序
⑥java目录:存放java源文件
⑦resource目录:存放框架或其他工具配置文件

4.POM

(POM)Project Object Model:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven 工程的核心配置。可以说学习 Maven 就是学习 pom.xml 文件中的配置。


5. 坐标

5.1. 几何中的坐标

  • 在一个平面中使用 x、y 两个向量可以唯一的确定平面中的一个点。
  • 在空间中使用 x、y、z 三个向量可以唯一的确定空间中的一个点。

5.2. Maven的坐标

使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。

  • groupId:公司或组织的域名倒序+当前项目名称
  • artifactId:当前项目的模块名称
  • version:当前模块的版本

    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.0.RELEASE</version>
    

5.3. 如何通过坐标到仓库中查找 jar 包?

  • gav 三个向量连起来

    org.springframework+spring-core+4.0.0.RELEASE
    
  • 以连起来的字符串作为目录结构到仓库中查找

    org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar
    

    ※注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install


6. 依赖

Maven 中最关键的部分,我们使用Maven最主要的就是使用它的依赖管理功能。要理解和掌握 Maven 的依赖管理,我们只需要解决一下几个问题:

  • 依赖的目的

当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目
中以依赖的方式引入一个我们需要的 jar 包呢?
答案非常简单,就是使用 dependency 标签指定被依赖 jar 包的坐标就可以了。

  • 依赖的范围

    上面的依赖信息中除了目标 jar 包的坐标还有一个scope 设置,这是依赖的范围。依赖的范
    围有几个可选值,我们用得到的是:compile、test(如:junit)、provided(如:servlet-api.jar)。

    • 有效性总结:
    范围 主程序 测试程序 参与部署
    compile
    test × ×
    provided ×
  • 依赖传递性
    A 依赖 B,B 依赖 C,A 能否使用 C 呢?当 B 依赖 C 的范围是 compile 则可用,否则不可用。

  • 依赖的排除
    如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时候将 B 排除。

 <exclusions>
     <exclusion> 
     <groupId>commons-logging</groupId>
     <artifactId>commons-logging</artifactId>
     </exclusion>
 </exclusions>
  • 统一管理所依赖 jar 包的版本
    对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提取出来

    • 统一声明版本号
    <properties>
        <chen.spring.version>4.1.1.RELEASE</chen.spring.version>
    </properties>

    其中chen.spring.version 部分是自定义标签。

    • 引用前面声明的版本号
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${chen.spring.version}</version>
        </dependency>
        ……
    </dependencies>
    • 其他用法
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
  • 依赖的原则:解决 jar 包冲突

    • 路径最短者优先
    • 路径相同时先声明者优先
      这里”声明”的先后顺序指的是 dependency 标签配置的先后顺序。

7. 仓库

7.1. 概述

  • 本地仓库:为当前本机电脑上的所有 Maven 工程服务。
  • 远程仓库
    • 私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。
    • 中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
    • 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

7.2. 仓库中的文件

  • Maven 自身需要的插件
  • 我们自己开发的项目的模块
  • 第三方框架或工具的 jar 包
    ※不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。

8. 生命周期

8.1. 概述

  • Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命令了。

  • Maven 有三套相互独立的生命周期:

    • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    • Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
    • Site Lifecycle 生成项目报告,站点,发布站点。
  • 它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。也可以直接运行 mvn clean install site 运行所有这三套生命周期。

  • 每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。

8.2. Clean生命周期

Clean 生命周期一共包含了三个阶段:

  • pre-clean 执行一些需要在 clean 之前完成的工作
  • clean 移除所有上一次构建生成的文件
  • post-clean 执行一些需要在 clean 之后立刻完成的工作

8.3. Site 生命周期

  • pre-site 执行一些需要在生成站点文档之前完成的工作
  • site 生成项目的站点文档
  • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy 将生成的站点文档部署到特定的服务器上
  • 这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点。

8.3. Default 生命周期

Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources 复制并处理资源文件,至目标目录,准备打包。
  • compile 编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources 复制并处理资源文件,至目标测试目录。
  • test-compile 编译测试源代码。
  • process-test-classes
  • test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package 接受编译好的代码,打包成可发布的格式,如 JAR。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install 将包安装至本地仓库,以让其它项目依赖。
  • deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

8.4. 生命周期与自动化构建

运行任何一个阶段的时候,它前面的所有阶段都会被运行,例如我们运行 mvn install 的时候,代码会被编译,测试,打包。这就是 Maven为什么能够自动执行构建过程的各个环节的原因。此外,Maven 的插件机制是完全依赖 Maven 的生命周期的,因此理解生命周期至关重要。

9. 插件和目标

  • Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
  • 每个插件都能实现多个功能,每个功能就是一个插件目标。
  • Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
    例如:compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标。

10. IDEA中的MAVEN Web项目

  • 先创建MAVEN项目,勾选maven-archetype-webapp,点击next
    1MavenWebPro

  • 填写GroupIdArtifactIdVersion

    2MavenWebPro

  • 选择Maven Home Directory

这里写图片描述

  • 填写Project Name。

4MavenWebPro

  • 创建完成,然后下载插件,结果如图。

5MavenWebPro

  • Project Structure中的Facts添加Web

6MavenWebPro

  • Project StructureFacts中设置Deployment DescriptorsWeb Resource Directories

7MavenWebPro

  • Project StructureArtifacts 添加 Web Application:Exploded
    8MavenWebPro

  • 配置tomcat
    9MavenWebPro

  • 添加Tomcat Server

10MavenWebPro

  • 将刚才的项目部署在tomcat。

11MavenWebPro

  • Tips: 由于Maven远程仓库在国外,所以在下载相关jar包时非常慢,可以将其配置为Alibaba的仓库。

猜你喜欢

转载自blog.csdn.net/qq_37138933/article/details/79176395
今日推荐