Maven 入门

来源:互联网 发布:pageoffice java 教程 编辑:程序博客网 时间:2024/05/27 00:49

1、Maven基本概念


Maven主要服务于Java平台,用于:


项目构建


依赖管理


项目信息管理



1.1、项目构建的过程


清理项目


编译项目


测试项目


生成测试报告


打包项目


部署项目



1.2、依赖管理


<dependencies>      <!-- 使用 Maven 坐标管理 Jar -->      <dependency>          <groupId>junit</groupId>          <artifactId>junit</artifactId>          <version>3.8.1</version>          <scope>test</scope>      </dependency>      <!-- 以上为一个完整示例 -->  </dependencies>  



1.3、使用 Maven 好处


明确的目录结构


管理依赖简洁


构件项目方便





2、使用 Maven


2.1、Maven 项目目录结构


|----src

|       |

|       |----main

|       |        |

|       |        |----java ——存放项目的 .java 文件

|       |        |

|       |        |----resources ——存放项目资源文件,如spring, hibernate配置文件

|       |        |

|       |----test

|       |        |

|       |        |----java ——存放测试 .java 文件

|       |        |

|       |        |----resources ——存放项目资源文件,如spring, hibernate配置文件

|       |        |

|----target ——文件编译后的目录

|

|----pom.xml ----Maven项目的配置文件



2.2、Maven常用命令


echo %MAVEN_HOME% 查看Maven安装目录


mvn -v 查看 Maven 版本


(以下需要切换到需要处理的项目的 pom.xml 文件目录下)


mvn clean 清理项目


mvn compile 编译项目


mvn test 测试项目


mvn package 打包:包括编译、测试、打包。


mvn install 安装:上传至本地仓库,包括编译、测试、打包、安装。


mvn site 生成测试报告


mvn deploy 上传项目至私服仓库


(手动创建 Maven,使用控制台命令测试效果)



2.3、pom.xml


<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/maven-v4_0_0.xsd">        <modelVersion>4.0.0</modelVersion>        <groupId>springmvc</groupId>        <artifactId>springmvc</artifactId>        <version>1.0-SNAPSHOT</version>        <packaging>war</packaging>                <dependencies>            <dependency>                <groupId>junit</groupId>                <artifactId>junit</artifactId>                <version>3.8.1</version>                <scope>test</scope>            </dependency>        </dependencies>                <build>            <finalName>springmvc</finalName>        </build>            </project>



2.4、Maven 三大生命周期


clean 清理工作


default 构建核心部分(编译、测试、打包、部署)


site 生成项目报告、站点、发布站点





3、Maven 仓库的概念


根据Maven的坐标,定义每个构件在仓库中的位置


路径为 groupId/artifactId/version/artifactId-version.packaging



3.1、Maven 坐标


3.1.1、Maven坐标主要组成:


groupId:定义maven的项目,可以用包名


artifactId:定义项目中的一个模块,一般都是工程名


version:版本


packaging:定义打包方式


3.1.2、Maven 坐标的作用:


用来标识构件,在依赖里面根据坐标来找需要的构件。



3.2、Maven 依赖:


根据maven坐标找依赖的构件


3.2.1、依赖中scope范围


3.2.1.1、compile: 编译依赖范围(默认)。编译,测试,运行三种有效。


3.2.1.2、test:测试依赖范围。只对测试代码有效。


3.2.1.3、provided:已提供依赖范围。对于编译,测试有效,但对于运行无效,因为由容器已经提供。


3.2.1.4、runtime:运行时提供。例如:jdbc驱动


compile、runtime会打到war包里去

test、provided不会打到war包里去

重点:手动测试测试效果


3.2.2、传递性依赖原则(依赖冲突解决):


3.2.2.1、路径最近者优先   CBA,C依赖B,B依赖A,会先用B的jar包


3.2.2.2、路径相同,第一声明者优先:CB,CA,看B,A在C中哪一个先声明



3.3、Maven 继承和聚合


3.3.1、继承:jar 包的统一管理,把 jar 抽取到 parent 项目中


3.3.2、聚合:一键打包


子项目 pom.xml


省略组名和版本号


增加 parent 配置关联父项目


依赖父项目中不共享部分 jar


<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/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <!-- 省略组名 -->    <!--<groupId>org.yangfan</groupId>-->    <artifactId>project2</artifactId>    <!--省略版本号-->    <!--<version>1.0-SNAPSHOT</version>-->    <packaging>war</packaging>    <!-- 关联父项目 -->    <parent>        <!-- 父项目-组名 -->        <groupId>org.yangfan</groupId>        <!-- 父项目-构件ID -->        <artifactId>parent</artifactId>        <!-- 父项目-版本 -->        <version>1.0-SNAPSHOT</version>        <!-- 父项目-路径(同级目录下可省略) -->        <relativePath>../parent</relativePath>    </parent>    <!-- 依赖 -->    <dependencies>        <!-- 依赖父项目 dependencyManagement 中定义的不共享 jar -->        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <!--省略版本号-->            <!--<version>4.11</version>-->        </dependency>    </dependencies>    <!-- 打包后的名称 -->    <build>        <finalName>project2</finalName>    </build></project>


父项目 pom.xml


package 改为 pom


定义不共享 jar


定义共享 jar


<?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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">      <modelVersion>4.0.0</modelVersion>        <groupId>org.yangfan</groupId>      <artifactId>parent</artifactId>      <version>1.0-SNAPSHOT</version>      <!-- 父项目-必须改成 pom -->      <packaging>pom</packaging>        <!-- 聚合 -->      <modules>          <module>../project2</module>      </modules>        <!-- 不共享 jar 依赖 -->      <dependencyManagement>          <dependencies>              <dependency>                  <groupId>org.yangfan</groupId>                  <artifactId>maven1</artifactId>                  <version>1.0-SNAPSHOT</version>              </dependency>              <dependency>                  <groupId>junit</groupId>                  <artifactId>junit</artifactId>                  <version>4.11</version>              </dependency>          </dependencies>      </dependencyManagement>        <!-- 共享 jar 依赖 -->      <dependencies>          <dependency>              <groupId>commons-logging</groupId>              <artifactId>commons-logging-api</artifactId>              <version>1.1</version>          </dependency>      </dependencies>    </project>



3.4、Maven 定义变量


<!-- 定义变量 --><properties><org.yangfan.maven1>1.0-SNAPSHOT</org.yangfan.maven1></properties>

<dependency><groupId>org.yangfan</groupId><artifactId>maven1</artifactId><!-- 使用变量 --><version>${org.yangfan.maven1}</version></dependency>


0 0