Maven学习笔记

Maven简介

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven可以很好的管理项目中的第三方jar包,避免冲突,一键配置(关于jar包和classpath看另一篇博客)。

代码:https://github.com/ShiyuLiuColumbia/MavenStudy

Maven的目录结构

代码见maven01

-src
-main
-java
-packages(这里存放程序的java源码)
-test
-java
-packages(这里存放测试的java源码)
resource
-pom.xml

pom.xml即存储了这个java项目的各种信息,包括所在的package名称,项目名称,所用到的依赖等等,maven根据pom.xml使用maven命令管理我们的java项目。

Maven基础知识

  1. Maven主要命令
    mvn compile 编译maven项目中主程序的源码,生成target目录,里面存放着源码编译成的.class文件以及测试报告
    mvn test 测试
    mvn package 打包成jar包
    mvn clean 删除target目录
    mvn install 安装jar包到本地仓库中

  2. mvn install例子
    代码见maven02
    如果我们想要在maven02工程中使用上面例子中的maven01 package,需要先将maven01打包成jar包,然后将该jar包安装到本地仓库中(mvn install)。然后再将maven01的依赖写入maven02的pom文件即可。

  3. maven中的坐标与仓库
    坐标:groupId+artifactId+version
    仓库:本地仓库和远程仓库,maven根据坐标在仓库中查找依赖的jar包

  4. maven生命周期:
    https://www.liaoxuefeng.com/wiki/1252599548343744/1309301196980257
    clean:清理项目
    default:构建项目
    site:生成项目站点

  5. maven插件
    https://www.liaoxuefeng.com/wiki/1252599548343744/1309301217951777

  6. pom.xml中常见元素解析

<modelVersion>4.0.0</modelVersion>  //当前pom版本

<groupId>反写公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<version>0.0.1</version>
<packaging></packaging> //项目打包方式,默认是jar,也可以是war,zip,pom
<name></name> //项目描述名
<url></url> //项目地址
<description></description> //项目描述
<developers></developers>
<licenses><licenses>

<dependencies>
    <dependency>
           <groupId>反写公司网址+项目名</groupId>
            <artifactId>项目名+模块名</artifactId>
            <version>0.0.1</version> 
            <type></type>
            <scope>test</scope> //依赖范围,比如这里这个依赖只在测试阶段有用
            <optional></optional> //设置依赖是否可选,默认false
            <exclusions> //排除依赖列表
                <exclusion>
                <exclusion>
            <exclusions>
    </dependency>    
</dependencies>

<dependencyManagement> //另一在父模块中,用于子模块继承,但是这之中的依赖不会被使用
</dependencyManagement>

<build>
    <plugins>
        <plugin>
           <groupId>反写公司网址+项目名</groupId>
            <artifactId>项目名+模块名</artifactId>
            <version>0.0.1</version> 
        </plugin>
    </plugins>
</build>

<parent></parent>
<modules></modules>
  1. maven依赖范围
    Dependency scope is used to limit the transitivity of a dependency, and also to affect the classpath used for various build tasks.
    https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
    默认的依赖范围是compile,对编译,测试,运行三种阶段的classpath均有效

  2. maven依赖传递与依赖冲突
    maven的依赖是逐步传递的

如何某个依赖多次被使用,那么依据1.短路优先 2.若路径长度相同,谁先出现使用谁