测试积点老人 发表于 2019-1-7 17:07:59

Maven入门介绍

本帖最后由 测试积点老人 于 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生命周期maven cleanclean生命周期由以下几个阶段(phase)组成:
[*]pre-clean
[*]clean
[*]post-clean


2. Maven安装3. Maven的标准工程结构Maven的标准工程结构如下:|-- pom.xml         (Maven的核心配置文件)
|-- src
|-- main
|      -- java                         (java源代码目录)
                -- resources      (资源文件目录)
|-- test
      -- java                         (单元测试代码目录)
|-- target                                 (输出目录,所有的输出物都放在这个目录下)
      -- classes                         (编译后的class文件存放处)

3. POM文件POM代表工程对象模型。它是一个xml文件,包含了关于工程和各种配置细节的信息,Maven使用这些信息构建工程。 POM文件是使用Maven工作的基本组件。被放在工程根目录下,命名为pom.xml,每个project应该只有一个POM文件。
3.1 POM举例<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.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>

</project>
每个POM文件需要project元素和三个必须的字段:
[*]groupId: 工程组的标志:它在一个组织或项目中通常是唯一的
[*]artifactId: 工程的标志:通常是工程的名称
[*]version:      工程的版本号
以上三个字段唯一确定了某个project:groupId确定了组织,artifactId确定了该组织下的某个project(以名字来区分),version确定了该project的版本

4. Maven资源依赖新建一个Maven项目时,Maven会检查你的pom.xml文件,确定哪些依赖需要下载。这里用到dependency标签,如下所示:<dependencies>
      <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
                <scope>test</scope>
      </dependency>
</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的配置文件中声明远程的位置,如下:<repositories>
      <repository>
                <id>java.net</id>
                <url>https://maven.java.net/content/repositories/public/</url>
      </repository>
</repositories>现在,Maven的依赖库查询顺序更改为:
[*]在Maven本地资源库中搜索,如果没有找到,进入第2步,找到则退出
[*]在Maven中央存储库搜索,如果没有找到,进入第3步,找到则下载到本地存储库,然后退出
[*]在声明的远程存储库搜索,如果没有找到,提示错误信息并退出,找到则下载到本地存储库,然后退出


5. Maven插件Maven实际上是一个依赖插件执行的框架,如上所述,这个框架定义了项目的构建过程(阶段),每个阶段又可以分为多个目标。目标是实际需要执行的动作。动作是如何定义的呢? 就是通过插件。Maven中的插件式一个或多个目标的集合,定义了目标待执行的操作。插件简化了项目的构建,不然每次构建一个新的项目时我们都需要手动写一套待执行的动作(如Netfilter中 编写并挂载一套新的hook)。有了插件后,我们可以直接指定使用哪个插件完成哪个动作。同普通依赖库相同,插件在Maven中也使用相同的维护方法,不过在中央版本库中的维护目录不同。
可以使用下面的语法执行:mvn :
例如,一个Java工程可以使用maven-compiler-plugin的compile-goal编译,pom文件的配置如下:<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.1</version>
</plugin>
使用以下命令:mvn compiler:compile
会调用maven-compiler-plugin插件并执行compile目标。完整的命令应该是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的元素中配置


Miss_love 发表于 2021-1-5 13:43:23

支持分享
页: [1]
查看完整版本: Maven入门介绍