随笔一记-Maven

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随笔一记-Maven相关的知识,希望对你有一定的参考价值。

一、Maven的基本概念

Maven(翻译为"专家", "内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建, 依赖管理和项目信息管理

1.1、项目构建

项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤, 这六个步骤就是一个项目的完整构建过程, 理想的项目构建是高度自动化, 跨平台, 可重用的组件, 标准化的, 使用maven就可以帮我们完成上述所说的项目构建过程。

1.2、依赖管理

依赖指的是jar包之间的相互依赖, 比如我们搭建一个Struts2的开发框架时, 光光有struts2-core-2.3.16.3.jar这个jar包是不行的, struts2-core-2.3.16.3.jar还依赖其它的jar包, 依赖管理指的就是使用Maven来管理项目中使用到的jar包, Maven管理的方式就是“自动下载项目所需要的jar包, 统一管理jar包之间的依赖关系”。

1.3、使用Maven的好处

Maven中使用约定, 约定java源代码代码必须放在哪个目录下, 编译好的java代码又必须放到哪个目录下, 这些目录都有明确的约定。

Maven的每一个动作都拥有一个生命周期, 例如执行 mvn install 就可以自动执行编译, 测试, 打包等构建过程

只需要定义一个pom.xml,然后把源码放到默认的目录, Maven帮我们处理其他事情

使用Maven可以进行项目高度自动化构建, 依赖管理(这是使用Maven最大的好处), 仓库管理。

二、Maven下载

下载地址:https://maven.apache.org/download.cgi

技术分享

下载完成后, 得到一个压缩包, 解压, 可以看到maven的组成目录

技术分享

Maven目录分析

  • bin:含有mvn运行的脚本
  • boot:含有plexus-classworlds类加载器框架
  • conf:含有settings.xml配置文件
  • lib:含有Maven运行时所需要的java类库
  • LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

三、Maven安装

2.1、首先要确保电脑上已经安装了JDK

(最好jdk 1.6+的版本),配置好JDK的环境变量,使用如下的两个命令检查检查JDK安装的情况

1 Echo %JAVA_HOME%
2 Java -version

2.2、apache-maven-3.2.3-bin.zip进行解压缩

apache-maven-3.2.3-bin.zip进行解压缩, (解压目录最好不要有中文)

2.3、设置系统环境变量:MAVEN_HOME

2.4、设置环境变量Path

%MAVEN_HOME%\\bin加入Path中,一定要注意要用分号;与其他值隔开

2.5、验证Maven安装是否成功

cmd窗口输入"mvn –v"命令 查看Maven的相关信息

2.6、设置MAVEN_OPTS环境变量(可选配置)

由于Maven命令实际上是执行了Java命令,所以可以通过JAVA命令参数的方式来设置MAVEN运行参数。MAVEN_OPTS环境变量正是用于此用途

MAVEN_OPTS = -Xms128m -Xmx512m,分别设置JVM的最小和最大内存

四、Maven的简单使用

4.1Maven项目的目录约定

MavenProjectRoot(项目根目录)
   |----src
   |     |----main
   |     |         |----java ——
存放项目的.java文件
   |     |         |----resources ——
存放项目资源文件,如spring, hibernate配置文件
   |     |----test
   |     |         |----java ——
存放所有测试.java文件,如JUnit测试类
   |     |         |----resources ——
存放项目资源文件,如spring, hibernate配置文件
   |----target ——
项目输出位置
   |----pom.xml ----
用于标识该项目是一个Maven项目

4.2、手动创建Maven项目,使用Maven编译

1、创建项目根文件夹,例如Maven01

2、在Maven01文件夹中创建“pom.xml”文件

pom.xml文件中的内容如下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2  <project xmlns="http://maven.apache.org/POM/4.0.0" 
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
 5  http://maven.apache.org/xsd/maven-4.0.0.xsd">
 6      <!--所有的Maven项目都必须配置这四个配置项-->
 7      <modelVersion>4.0.0</modelVersion>
 8      <!--groupId指的是项目名的项目组,默认就是包名-->
 9      <groupId>cn.gacl.maven.hello</groupId>
10      <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
11      <artifactId>hello-first</artifactId>
12      <!--version指的是版本,这里使用的是Maven的快照版本-->
13     <version>SNAPSHOT-0.0.1</version>
14 </project>

 

3.编写Java类文件

Maven项目规定,所有的*.java文件必须放在src目录下的main目录下的java目录中,在Maven01项目根目录中创建一个src目录,然后在src目录中创建main目录,在main目录中再创建java文件夹

java文件夹下创建一个Hello.java文件

Hello.java文件中编写如下代码:

1 public class Hello{
2     public static void main(String[] args){
3          System.out.println("Hello Maven");
4      }
5  }

 

4.使用Maven编译Hello.java

首先进入到项目根目录,然后使用命令mvn compile进行编译

使用Maven编译完成之后,在项目根目录下会生成一个target文件夹

打开target文件夹,可以看到里面有一个classes文件夹, classes文件夹存放的就是编译成功后生成的.class文件

5.使用"mvn clean"命令清除编译结果,也就是把编译生成的target文件夹删掉

4.3Maven坐标主要组成

·       groupId:组织标识(包名)

·       artifactId:项目名称

·       version:项目的当前版本

·       packaging:项目的打包方式,最为常见的jarwar两种

4.4、依赖范围

  依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

    1.compile:默认编译依赖范围。对于编译,测试,运行三种classpath都有效
    2.test
:测试依赖范围。只对于测试classpath有效
    3.provided
:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
    4.runtime:
运行时提供。例如:jdbc驱动

4.5Maven仓库布局

  根据Maven坐标定义每个构建在仓库中唯一存储路径,

大致为:groupId/artifactId/version/artifactId-version.packaging

4.6、仓库的分类

4.6.1、本地仓库

  每个用户只有一个本地仓库,默认是在~/.m2/repository/~代表的是用户目录

4.6.2、远程仓库

  1、中央仓库:Maven默认的远程仓库,URL地址:http://search.maven.org/

  2、私服:是一种特殊的远程仓库,它是架设在局域网内的仓库

 

五、生命周期

5.1、何为生命周期?

  Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

5.2Maven三大生命周期

  Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

  再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。 
  clean
生命周期每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的cleanClean生命周期的一个阶段。有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

pre-clean 执行一些需要在clean之前完成的工作

clean 移除所有上一次构建生成的文件

post-clean 执行一些需要在clean之后立刻完成的工作

  "mvn clean" 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,"mvn clean"等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-cleanclean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。 
  Site
生命周期pre-site 执行一些需要在生成站点文档之前完成的工作

site 生成项目的站点文档

post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

site-deploy 将生成的站点文档部署到特定的服务器上

  这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。
  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 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

  运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

六、Maven插件

1.Maven的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。

2.每个插件都能实现多个功能,每个功能就是一个插件目标。

3.Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,例如compile就是插件maven-compiler-plugin的一个插件目标

6.1、聚合配置代码

<modules>
      <module>模块一</module>
      <module>模块二</module>
      <module>模块三</module>
</modules>

 

6.2、继承配置代码

<parent>  
         <groupId>me.gacl.maven</groupId>
         <artifactId>ParentProject</artifactId>
         <version>0.0.1-SNAPSHOT</version>
         <relativePath>../ParentProject/pom.xml</relativePath>  
</parent>

6.3、继承代码中定义属性

访问属性的方式为${junit.version}
















以上是关于随笔一记-Maven的主要内容,如果未能解决你的问题,请参考以下文章

随笔一记

随手一记,maven打包

[每日一记] Python报错 IndentationError: unexpected indent

每日一记8.1

maven 随笔

学习随笔201109