Loading

Maven基础1

Maven的主要功能概念及使用

一、maven的功能?

  • 构建工具(打包项目)
  • 依赖管理(jar包依赖)
  • 项目信息聚合

构建工具:

[清理]-->[编译]-->[测试]-->[报告]-->[打包]-->[部署]

依赖管理

管理项目中所使用的jar包(主要作用)

项目信息聚合

版本信息、开发者信息、测试报告.......等等

二、maven的安装

1. 安装maven

  1. 下载解压 maven 压缩包(http://maven.apache.org/)
  2. 配置环境变量:
  • ①MAVEN_HOME :maven的安装地址
  • ②path:%MAVEN_HOME%\bin

Maven本地仓库的配置:
maven的仓库一般在C盘用户下---->用户名---->.M2文件--->resporsitry,如果没有出现,去cmd中随便运行个Maven命令就会自动生成,不需要自己建(例如命令行输入命令:mvn clean)

默认位置:C盘--->用户--->自己的用户名--->.m2---->resporsitry

在命令行执行如下命令:

mvn --version

如出现类似如下结果,则证明 maven 安装正确/成功。

Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: D:\Program Files\apache-maven-3.5.0\bin\..
Java version: 1.8.0_144, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_144\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

如需更改本地仓库位置

在如下路径中找到settings.xml配置文件:

Maven的安装路径---->conf---->settings.xml
找到第53行代码,找到/path/to/local/repo,
把标签内的替换成仓库的地址。

2. pom文件

setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。

pom.xml基础配置

<?xml version="1.0" encoding="UTF-8"?>   <!--必须第一行-->
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">  <!--pom.xml的约束文件-->

      <!-- 模型版本。 -->  
    <modelVersion>4.0.0</modelVersion>  

    <!-- 为pom定义一些常量,在pom中的其它地方可以直接引用 使用方式 如下 : ${file.encoding} -->  
    <properties>  
        <file.encoding>UTF-8</file.encoding>  
        <junit.version>4.11</junit.version>  
    </properties>  

     <!-- 定义本项目的依赖关系 -->  
    <dependencies>  
  
        <!-- 每个dependency都对应这一个jar包 -->  
        <dependency>  
  
            <!--一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索, 然后引入你的工程。 -->  
           
           <!-- 公司或者组织的唯一标志-->
            <groupId>junit</groupId>  
        
        <!-- 项目的 唯一 ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --> 
            <artifactId>junit</artifactId>  
          
          <!-- 项目的版本号 -->  
            <version>${junit.version}</version>  <!--这里就可以引用上面定义的常量-->
  
            <!-- jar包的依赖范围 -->  
            <scope>test</scope>  
  
        </dependency>  
  
    </dependencies>  


    <build>

    
    <finalName>${project.artifactId}</finalName>

     <!--使用的插件列表 。 -->  
    <plugins>
        <plugin>
         <!-- tomcat 7 插件 -->
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <port>8080</port>
                <path>/${project.artifactId}</path>
                <uriEncoding>UTF-8</uriEncoding>
            </configuration>
        </plugin>
    </plugins>

</build>

三、maven项目的目录结构:

  • Java程序的目录结构

  • Java-Web程序的目录结构

四、Maven核心概念

1. 坐标

在 maven 中坐标就是为了定位一个唯一确定的 jar 包。坐标的组成部分有:

* groupId:定义当前Maven组织名称
* artifactId:定义实际项目名称
* version:定义当前项目的当前版本

2. 依赖管理

依赖管理就是对项目中 jar 包的管理。可以在 pom 文件中定义 jar 包的坐标,管理依赖。

依赖声明主要包含如下元素:

<dependencies>

  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>

</dependencies>

3. 依赖范围

依赖范围(Scope) 对主代码ClassPath有效 对测试代码ClassPath有效 被打入jar / war包中 例子
compile yes yes yes log4j
test - yes - junit
privided yes yes - servlet-api
runtime - - yes jdbc驱动实现类

4. 生命周期

Maven 生命周期就是为了对所有的构建过程进行抽象和统一。这个过程分为三个独立阶段(也叫生命周期):

  • Clean Lifecycle:在进行真正的构建之前进行一些清理工作。
  • Default Lifecycle:构建的核心部分,编译,测试,打包,部署等等。
  • Site Lifecycle:生成项目报告,站点,发布站点。

这三个阶段是相互独立的,这意味着,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

三个阶段中,Default Lifecycle 是核心。

这三个阶段,每个阶段中又各自分为不同的小步骤。当执行某一个小步骤时,它之前的小步骤都会被执行。Default Lifecycle 中包含了几十个小步骤,其中重要和常用的步骤(先后顺序)是:

  • ...
  • compile: 编译项目的源代码。
  • ...
  • test: 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • ...
  • package: 接受编译好的代码,打包成可发布的格式,如 JAR 。
  • ...
  • install: 将包安装至本地仓库,以让其它项目依赖。
  • ...

5. 插件

Maven 本质上是一个插件的框架/平台。

例如:

  • mvn compile 这个命令,就是由 maven-compiler-plugin 插件提供的。
  • mvn test 这个命令,就是由 maven-surefire-plugin 插件提供的。
  • mvn package 这个命令,就是由 maven-jar-plugin / maven-war-plugin 插件提供的。

添加插件:

<build>
  <plugins>

    <plugin>
      <!-- 配置插件 -->
      <groupId>org.apache.tomcat.maven</groupId>
      <artifactId>tomcat7-maven-plugin</artifactId>
      <version>2.2</version>
      <configuration>
        <path>/demo</path>
        <port>8080</port>
        <uriEncoding>UTF-8</uriEncoding>
        </configuration>
      </plugin>
      
    <plugin>...</plugin>

    <plugin>...</plugin>

  <plugins>
  ...
</build>

Maven 除了内置/自带的插件外,还可以“安装”第三方插件。任何一个 Maven 动作都是交由具体的插件去完成的。

6.Maven仓库

用来统一存储所有Maven共享构建的位置就是 Maven 仓库。

Maven 仓库分为

  • 本地仓库 ~/.m2/repository 每个用户只有一个本地仓库 ~代表C盘下的用户

  • 远程仓库

  1. 中央仓库:Maven 默认的远程仓库 http://repo1.maven.org/maven2
  2. 私服:是一种特殊的远程仓库,它是架设在局域网内的仓库(例如公司可能会架设私服仓库)
  • 以下网站可查询每个项目的坐标
  1. https://mvnrepository.com/
  2. https://maven.aliyun.com/mvn/search

中央仓库位置修改(修改 settings.xml 配置文件)

<mirrors>
  <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>

maven仓库用一句话来概括:

Maven项目中会将所需的jar包放到本地仓库,如果没有会到局域网私服仓库中寻找,有的话就带一份回来放入本地仓库。私服仓库没有的话就去中央仓库,如果有就带一份回来放在本地仓库。

五、Maven命令

在使用终端时,Maven 命令需要在 pom.xml 所在目录中执行以下命令。

  • mvn compile
  1. 执行 mvn compile 命令,完成编译操作
  2. 执行完毕后,会生成 target 目录,该目录中存放了编译后的字节码文件(.class文件)。
  • mvn clean
  1. 执行 mvn clean 命令,完成清理操作。
  2. 执行完毕后,会将 target 目录删除。
  • mvn test
  1. 执行 mvn test 命令,完成单元测试操作
    2.执行完毕后,会在 target 目录中生成三个文件夹:surefire、surefire-reports(测试报告)、test-classes(测试的字节码文件)。
  • mvn package
  1. 执行 mvn package 命令,完成打包操作
  2. 执行完毕后,会在 target 目录中生成一个文件,该文件可能是 jar、war 。
  • mvn clean compile
  1. 组合指令,等价于先后执行:mvn clean 和 mvn compile 。通常应用于上线前执行,清除测试类
  • mvn clean test
  1. 组合指令,等价于先后执行:mvn clean 和 mvn test,通常应用于测试环节。
posted @ 2019-10-25 12:48  Helen's  阅读(154)  评论(0编辑  收藏  举报