Maven入门教程

引言

maven是一个项目管理工具,由最初的ant进化而来。虽然目前最新的是gradle,但是maven还是流串于各大公司的代码中(如springboot的源码管理)。因此,对于初学者来说,学会使用使用maven是对于后期成长非常有帮助的。
这里推荐慕课网上的maven基础课程,有空的同学一定去学一学,能够查缺补漏(https://www.imooc.com/learn/443

项目基本架构

maven推崇的是约定大于配置,利用maven搭建的项目一定是如下的结构:


图1.代码结构图
* src
  * main
    * java
      * com.xxx(java代码)
    * resources 
      * xxx(资源文件)
  * test
    * javaxx (java测试代码)
* pom.xml
pom文件的基本介绍
<?xml version="1.0" encoding="UTF-8"?>
<!--project是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">
    <!--指定当前pom的版本-->
    <modelVersion>4.0.0</modelVersion>

    <!--这里写包名,一般为公司网址的反写+项目名-->
    <groupId>com.yuxun.fantuan</groupId>
    <!--这里写模块名,一般为项目名-模块名-->
    <artifactId>fantuan-parent</artifactId>
    <!--这里写版本-->
    <!--第一位大版本,第二位分支版本,第三位小版本
    snapshot快照
    alpha内部测试
    beta公测
    release稳定
    ga正式发布
    -->
    <version>2.6.0-SNAPSHOT</version>
    <!--默认是jar,也可以是
    war
    zip
    pom,是打包多module模式下,多个模块一起打包用的-->
    <packaging>pom</packaging>
    <!--项目描述名 -->
    <name></name>
    <!--项目地址 -->
    <url></url>
    <!--项目描述 -->
    <description></description>
    <developers></developers>
    <licenses></licenses>
    <organization></organization>
    <!--自定义一些属性标签,用的时候就是${juint.version}-->
    <properties>
        <junit.version>3.8.1</junit.version>
    </properties>
    <dependencies>
       <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.10</version>
       </dependency>
    </dependencies>
    <!-- 依赖的管理 -- >
    <!-- 抽象出来做成父类被继承的,写在里面的jar将不会被本模块依赖-->
    <dependencyManagement>
       <dependencies>
          <dependency>
          </dependency>
       </dependencies>
    </dependencyManagement>

    <build>
       <!-- 插件列表 -->
       <plugins>
          <plugin>
             <groupId></groupId>
             <artifactId></artifactId>
             <version></version>
          </plugin>
       </plugins>
    </build>
    <!-- -->
    <parent></parent>
    <!-- -->
    <modules>
       <module></module>
    </modules>
</project>

其中groupId,artifactId,version三者称之为坐标

maven常用的命令

mvn -v 查看maven版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除target
mvn install 将代码打包成jar包到本地仓库中
mvn archetype:generate 创建maven目录架构
mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所存在的包名

maven配置文件的修改

conf下面的setting文件里面的localRepository标签是存在jar包的位置
mirrors标签是镜像地址

maven依赖仲裁

  • maven依赖冲突——短路优先
    1.A -> B -> C -> X(jar)
    2.A -> D -> X(jar)
    优先选择路径短的,所以优先选择2
  • 相同路径的情况下,哪个dependency在前就是引用哪个。

maven <dependencyManagement>和<dependencies>的区别

参考网址:https://blog.csdn.net/liutengteng130/article/details/46991829
同时阿里巴巴java开发手册里面有这么提到:

8.【推荐】所有pom文件中的依赖声明放在<dependencies>语句块中,所有版本仲裁放在<dependencyManagement>语句块中。
说明:<dependencyManagement>里只是声明版本,并不实现引入,因此子项目需要显式的声明依赖,version和scope都读取自父pom。而<dependencies>所有声明在主pom的<dependencies>里的依赖都会自动引入,并默认被所有的子项目继承。

maven 的一些常见问题

1.打包成pom文件和打包成jar文件,zip文件有什么区别呢?
答:<type>pom</type>,pom文件打包最后就是pom文件,丢到私服上面就是pom文件。同时该模块下面的module又会进行相应的打包,根据他们的格式打包成相应的文件。
2.mvn 的dependeny命令是做什么的?
答:mvn clean dependency:copy-dependencies -DoutputDirectory=lib 把当前的pom文件中的依赖给下载下来。
3.maven <executions>标签的作用?
答:

<build>
    <!-- 插件列表 -->
    <plugins>
       <plugin>
          <groupId>xx</groupId>
          <artifactId>jetty</artifactId>
          <version>xx</version>
          <executions>
            <execution>
                <!-- 在打包成功后使用jetty:run来运行jetty的服务-->
                <phase>package</phase>
                <goals>
                    <goal>run</goal>
                </goals>
            </execution>
        </executions>
      </plugin>
  </plugins>
</build>

4.maven私服是什么东西?
答:maven我们都知道会去中央仓库去下载依赖到本地,这样就能引入到项目中。但是,我们自己的项目不一定会开源,上传到的地方不必要向所有人展示,所以要搭建自己的私人服务器。我们可以通过修改配置,先去私服上下载maven依赖,当从私服上找不到的时候就会去中央仓库中下载。一般使用nexus搭建maven私服。具体的搭建方法百度一下就有很多了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 简介 概述 Maven 是一个项目管理和整合工具 Maven 为开发者提供了一套完整的构建生命周期框架 Maven...
    闽越布衣阅读 4,280评论 6 39
  • Maven 简介 Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一...
    GavinHacker阅读 3,008评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,638评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,778评论 6 342
  • 滴滴,滴滴……,声音由远及近,穿过了几条街,还在延绵不断地响个不停,就好像想让身前的一切都为自己让开一条路一样,就...
    子龙老师阅读 403评论 0 1