51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1780|回复: 1
打印 上一主题 下一主题

Maven入门介绍

[复制链接]
  • TA的每日心情
    无聊
    10 小时前
  • 签到天数: 528 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2019-1-7 17:07:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 测试积点老人 于 2019-1-7 17:10 编辑

    Maven1. Maven介绍

    Maven是一个项目管理工具,可以负责项目开发过程中几乎所有的东西。



    1.2 生命周期

    Maven用生命周期来描述一个项目的构建过程,一个生命周期中包含一组阶段的序列,每个阶段(phase)定义了目标(goal,操作)及目标被执行的顺序。一个典型的Maven构建生命周期 由以下几个阶段的序列组成:

    • prepare-resource,资源拷贝,本阶段可以自定义需要拷贝的资源
    • compile,编译,完成源代码的编译
    • package,打包,根据配置文件的描述,打包配置创建jar包
    • install,安装,在本地/远程仓库中安装工程包

    这里感觉与Linux IP协议栈中的Netfilter类似(三表五链),定义了几个挂载点,在挂载点上挂载钩子函数,数据包在经过某个挂载点(对应Maven中的phase)时会自动执行 挂载的函数钩子(对应Maven中的goal)

    Maven也是类似的,定义了生命周期中的序列(phase),在序列上注册目标(goal),然后当Maven开始构建工程时,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。

    Maven有以下三个标准的生命周期:

    • clean
    • default(or build)
    • site


    1.2.1 clean

    调用如下命令后,Maven进入clean生命周期

    1. maven clean
    复制代码

    clean生命周期由以下几个阶段(phase)组成:

    • pre-clean
    • clean
    • post-clean


    2. Maven安装3. Maven的标准工程结构

    Maven的标准工程结构如下:

    1. |-- pom.xml         (Maven的核心配置文件)
    2. |-- src
    3. |-- main
    4. |        -- java                         (java源代码目录)
    5.                 -- resources        (资源文件目录)
    6. |-- test
    7.         -- java                         (单元测试代码目录)
    8. |-- target                                 (输出目录,所有的输出物都放在这个目录下)
    9.         -- classes                         (编译后的class文件存放处)
    复制代码


    3. POM文件

    POM代表工程对象模型。它是一个xml文件,包含了关于工程和各种配置细节的信息,Maven使用这些信息构建工程。 POM文件是使用Maven工作的基本组件。被放在工程根目录下,命名为pom.xml,每个project应该只有一个POM文件。


    3.1 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. <modelVersion>4.0.0</modelVersion>

    6. <groupId>com.companyname.project-group</groupId>
    7. <artifactId>project</artifactId>
    8. <version>1.0</version>

    9. </project>
    复制代码

    每个POM文件需要project元素和三个必须的字段:

    • groupId: 工程组的标志:它在一个组织或项目中通常是唯一的
    • artifactId: 工程的标志:通常是工程的名称
    • version:        工程的版本号

    以上三个字段唯一确定了某个project:groupId确定了组织,artifactId确定了该组织下的某个project(以名字来区分),version确定了该project的版本



    4. Maven资源依赖

    新建一个Maven项目时,Maven会检查你的pom.xml文件,确定哪些依赖需要下载。这里用到dependency标签,如下所示:

    1. <dependencies>
    2.         <dependency>
    3.                 <groupId>log4j</groupId>
    4.                 <artifactId>log4j</artifactId>
    5.                 <version>1.2.12</version>
    6.                 <scope>test</scope>
    7.         </dependency>
    8. </dependencies>
    复制代码

    Maven会根据配置文件找到依赖关系,到Maven的本地资源库查找是否有该资源,如果没找到,Maven会自动从默认的Maven中央存储库查找下载。如果Maven中心存储库中也没有找到,该过程将 停止并将错误消息输出到maven控制台。

    其中的scope标签,表示jar包的作用范围。可以填写compile、runtime、test、system和provided,用来在编译、测试等场景下选择对应的classpath。



    4.1 Maven本地资源库

    新建一个Maven项目时,所有相关文件将被存储在Maven的本地仓库。默认情况下,Maven的本地资源库默认在用户目录的.m2目录下, 可以通过修改配置文件来修改这个默认目录(maven安装目录/conf/setting.xml里面的localRepository项)


    4.2 Maven中央存储库

    对于本地仓库中没有的依赖包,Maven会从中央存储库中下载。可以在网站<link http://mvnrepository.com/>上搜寻需要的jar包及版本。


    4.3 手动声明储存库

    还可以在Maven的配置文件中声明远程的位置,如下:

    1. <repositories>
    2.         <repository>
    3.                 <id>java.net</id>
    4.                 <url>https://maven.java.net/content/repositories/public/</url>
    5.         </repository>
    6. </repositories>
    复制代码

    现在,Maven的依赖库查询顺序更改为:

    • 在Maven本地资源库中搜索,如果没有找到,进入第2步,找到则退出
    • 在Maven中央存储库搜索,如果没有找到,进入第3步,找到则下载到本地存储库,然后退出
    • 在声明的远程存储库搜索,如果没有找到,提示错误信息并退出,找到则下载到本地存储库,然后退出


    5. Maven插件

    Maven实际上是一个依赖插件执行的框架,如上所述,这个框架定义了项目的构建过程(阶段),每个阶段又可以分为多个目标。目标是实际需要执行的动作。动作是如何定义的呢? 就是通过插件。Maven中的插件式一个或多个目标的集合,定义了目标待执行的操作。插件简化了项目的构建,不然每次构建一个新的项目时我们都需要手动写一套待执行的动作(如Netfilter中 编写并挂载一套新的hook)。有了插件后,我们可以直接指定使用哪个插件完成哪个动作。同普通依赖库相同,插件在Maven中也使用相同的维护方法,不过在中央版本库中的维护目录不同。


    可以使用下面的语法执行:

    1. mvn [plugin-name]:[goal-name]
    复制代码

    例如,一个Java工程可以使用maven-compiler-plugin的compile-goal编译,pom文件的配置如下:

    1. <plugin>
    2.         <groupId>org.apache.maven.plugins</groupId>
    3.         <artifactId>maven-compiler-plugin</artifactId>
    4.         <version>3.1</version>
    5. </plugin>
    复制代码

    使用以下命令:

    1. mvn compiler:compile
    复制代码

    会调用maven-compiler-plugin插件并执行compile目标。完整的命令应该是

    1. mvn org.apache.maven.plugins:maven-compiler-plugin:3.1:compiler
    复制代码

    这里为什么可以直接的执行?

    • Maven默认使用org.apache.maven.plugins作为groupId,所以命令mvn compiler:compile解析后变为:mvn org.apache.maven.plugins:compiler:compile
    • 根据插件元数据的xml中配置的prefix(compiler)找到duiying de artifactId,此时命令解析变为:mvn org.apache.maven.plugins:maven-compiler-plugin:compiler:compile
    • 最后根据groupId和artifactId,找到各个版本的该插件,用其中的稳定版本即可,此时命令解析为最终的形态


    5.1 插件类型

    Maven提供了两种类型的插件

    • Build Plugins:        在构建时执行,并在pom.xml的元素中配置
    • Reporting Plugins:        在网站声称过程(site生命周期)中执行,并在pom.xml的元素中配置


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 19:56 , Processed in 0.066494 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表