Maven项目管理利器

我是一个要做程序员的男人。有问题可以随时联系我。

  • 1、maven快速入门
  • 2、maven核心知识
  • 3、maven建立web项目

1、Maven快速入门

1.1 maven介绍及环境搭建

maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
在apache官网下载maven安装包。
下载地址:https://maven.apache.org/download.cgi
目录结构如下:

  • bin/
  • boot/
  • conf/
  • lib/
    将当前的bin目录设为环境变量
    此时maven安装成功

1.2 maven目录结构

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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <!--项目包名-->
    <groupId>com.imooc.maven01</groupId>
    <!-- 模块名-->
    <artifactId>maven01-model</artifactId>
    <!-- 版本-->
    <version>0.0.1SNAPSHOT</version>
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>
</project>

mvn compile 项目编译命令
mvn test 运行测试用力

执行完成测试后,得到一个target目录
classes ------------------ 项目字节码文件
maven-status ------------
surefire-reports ----------- 测试报告
test-classes --------------- 测试字节码文件

mvn package 打包,将项目打包成一个jar包
jar包名字由 模块名-版本名

2、Maven核心知识

2.1 maven基础知识

常用命令

mvn -v 查看版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除target
mvn install 安装jar包到本地仓库

在此对mvn install进行说明,将项目发布到本地仓库,若有其他项目需要使用的时候直接在pom.xml中添加项目依赖,可以将该jar包加入使用

2.2 maven自动创建目录骨架

archetype插件用于创建maven规定的目录骨架

运行命令 mvn archetype:generate 进行构建目录骨架
输入以上的命令,在最后会要求输入 groupId artifactId version package
mvn archetype:generate -DgroupId:com.xxx.xxx -DartifactId=maven-demo -Dversion=1.0.0SNAPSHOT -Dpackage=com.xxx.xxx.maven-demo

2.3 maven中的坐标与仓库

在maven中任何一个依赖、插件项目输出可以认为是一个构件
构件通过坐标作为其唯一的标识
groupId artifactId version 构成唯一的坐标
仓库用来管理项目依赖的,仓库分为本地仓库远程仓库
远程仓库在lib/maven-model-builder-3.5.0.jar中的pom-4.0.0.xml,这是一个超级的pom所有都会继承此

<!--可以打开看到一个中央仓库地址-->
  <repositories>
    <repository>
      <id>central</id>    <!--中央仓库唯一标识-->
      <name>Central Repository</name>     <!--中央仓库名称-->
      <url>https://repo.maven.apache.org/maven2</url>   <!--中央仓库地址-->
      <layout>default</layout>   <--默认地址-->
      <snapshots>
        <enabled>false</enabled>   <--禁止下载快照-->
      </snapshots>
    </repository>
  </repositories>

镜像仓库,为了防止下载国外的比较慢
conf/settings.xml中找到<mirrors>标签添加

<!--以下只是例子-->
 <mirror>
      <id>maven.net.cn</id>
      <mirrorOf>central</mirrorOf>
      <name>central mirror in china</name>
      <url>http://maven.net.cn/content/groups/public</url>
    </mirror>

更改仓库位置
默认在当前用户的.m2目录中,mvn install发布的jar包也在此
找到conf/settings.xml中找到<localRepository>标签中,修改路径

<localRepository>/path/to/local/repo</localRepository>

2.4 maven的生命周期与插件

1、完成的项目构建过程过程:
clean、compile、test、package、install
清理、编译、测试、打包、集成测试、验证、部署
2、maven声明周期
clen 清理项目

  • pre-clean 执行清理前的工作
  • clean清理上一次构建生成的所有文件
  • post-clean 执行清理后的文件

default 构建项目(最核心)

  • compile test package install 都属于此

site 生成项目站点

  • pre-site 在生成项目站点前要完成的工作
  • site 生成项目的站点文档
  • post-site 在生成项目站点后要完成的工作
  • site-deploy 发布生成的站点到服务器上

3、插件

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase> <!--执行阶段-->
                        <goals>
                            <goal>jar-no-fork</goal> <!--执行目标-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2.5 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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--指定当前的pom版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--包名=反写公司网址+项目名-->
    <groupId></groupId>
    <!--项目名+模块名-->
    <artifactId></artifactId>
    <!--
        第一个0表示大版本号
        第二个0表示分支版本号
        第三个0表示小版本号
        0.0.1
        snapshot快照
        alpha内部测试
        beta公测
        Release稳定
        GA正式版本
    -->
    <version>0.0.1SNAPSHOT</version>
    <!--默认jar
        其他war zip pom
    -->
    <packaging></packaging>
    <!--项目描述名-->
    <name></name>
    <!--项目地址-->
    <url></url>
    <!--项目描述-->
    <description></description>
    <!--开发人员信息-->
    <developers></developers>
    <!--许可证信息,开源框架-->
    <licenses></licenses>
    <!--组织信息-->
    <organization></organization>
    
    <!--继承的父模块-->
    <parent></parent>
    <!--指定多个模块进行编译-->
    <modules>
        <module></module>
    </modules>
    
    <!--依赖列表-->
    <dependencies>
        <!--依赖项-->
        <dependency>
            <!--三个坐标-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <type></type>
            <!--依赖范围-->
            <scope>test</scope>
            <!--设置依赖是否可选 true false-->
            <optional></optional>
            <!--排除依赖列表-->
            <exclusions>
                <exclusion></exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    
    <!--通常在父模块中使用-->
    <dependencyManagement>
        <dependencies>
            <dependency>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <build>
        <!--插件列表-->
        <plugins>
            <plugin>
                <!--坐标-->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase> <!--执行阶段-->
                        <goals>
                            <goal>jar-no-fork</goal> <!--执行目标-->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

2.6 maven依赖范围

三种classpath:编译、测试、运行
test表示只存在于测试的classpath

<scope></scope>
中共有6中范围
compile:默认范围,编译测试运行都有效
provided:在编译和测试时有效
runtime:在测试和运行时有效
test:在测试有效
system:与本机系统相关联,可移植性差
import :导入的范围,只使用在dependencyManagement中,表示从其他的pom中导入的dependecy的配置

2.7maven依赖冲突

1、短路优先,优先解析短的版本
A->B->C->X(jar)
A->D->X(jar) 解析该版本
2、路径一致情况下,先声明先优先

2.8maven聚合和继承

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

推荐阅读更多精彩内容