Maven知识点一览
Maven
介绍和搭建
介绍
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告,和文档的软件项目管理工具。
环境搭建
网址:https://maven.apache.org/download.cgi
windows下载这个包:

配置环境变量:
M2_HOME :

path: %M2_HOME%\bin;
打开cmd验证:

修改配置文件中本地仓库位置:
打开setting.xml文件:

修改仓库为你自己的文件夹位置:

保存关闭即可。
小案例
Maven约定目录结构
mvn-project
src
-main
-java
-package
-test
-java
-package
resources
target
pom.xml
小测试
常用maven命令
mvn -v 查看maven版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 删除target
mvn install 安装jar包到本地仓库
建立maven-test目录并在其中建立如下目录结构

在main最后目录下建立一个Hallo.java文件,内容如下:
package com.imooc.maven01.model;
public class Hello{
public String sayHello(){
return "Hello";
}
}
在test文件夹最后目录下建立一个TestHello.java文件,内容如下:
package com.imooc.maven01.model;
import org.junit.*;
import org.junit.Assert.*;
public class HelloTest{
@Test
public void testSayHello(){
Assert.assertEquals("Hello",new Hello().sayHello());
}
}
在maven-test文件夹下建立一个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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.maven01</groupId>
<artifactId>maven-test</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
在maven-test目录下执行maven命令:
mvn compile
输出如下:

mvn test
输出如下:

mvn package
输出如下:

执行mvn clean,输出如下:

可以看到target文件夹已经不存在了:

执行 mvn install,输出如下:

可以在本地仓库中看到我们的jar包已经存在:

如果输出正确,代表安装及项目创建正确。
注册到仓库并被其他项目依赖
在maven-test目录执行: mvn install
成功后新建一个项目maven-test-2,目录如下:

并且在main最后一个目录下建立一个Speak.java文件,内容如下:
package com.imooc.maven02.util;
import com.imooc.maven01.model.*;
public class Speak{
public String useSayHallo(){
return new Hello().sayHello();
}
}
在test最后一个文件夹下建立一个TestSpeak.java文件,内容如下:
package com.imooc.maven02.util;
import org.junit.*;
import org.junit.Assert.*;
public class SpeakTest{
@Test
public void testSayHello(){
Assert.assertEquals("Hello",new Speak().useSayHallo());
}
}
pom.xml添加junit和maven-test依赖:
<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.maven02</groupId>
<artifactId>maven-test-2</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>com.imooc.maven01</groupId>
<artifactId>maven-test</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
执行maven test

成功,表示依赖相关操作正确。基于此功能方便在其他原有项目上构建更大的项目。
自动生成maven项目骨架
在命令行输入mvn archetype:generate,然后等待下载完相应插件根据提示输入groupId,artifactId,version然后就会自动帮你创建一个对应的maven骨架项目

结果如下:

或者直接设置所有的属性:
mvn archetype:generate -DgroupId=com.imooc.maven04 -DartifactId=maven-test-4 -Dversion1.0
-Dpackage=com.imooc.maven04.demo
然后一路回车即可完成创建
IDEA中配置Maven
当前项目配置:


为新建项目配置默认maven:


最好再更改一下下面的设置:


pom.xml解析
<project>
<modelVersion></modelVersion>
<groupId>反写公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--大版本.分支版本.小版本 snapshot快照,alpha内测,beta公测,Release稳定,GA正式发布-->
<version></version>
<!--默认是jar可以是war,zip,pom-->
<packaging></packaging>
<!--项目描述名-->
<name></name>
<!--项目网址-->
<url></url>
<!--项目描述-->
<description></description>
<!--开发者-->
<developers></developers>
<licenses></licenses>
<organization></organization>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<!--依赖使用范围-->
<scope></scope>
<!--依赖是否可选默认是false-->
<optional></optional>
<!--排除依赖列表-->
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
</dependencies>
<!--依赖管理(父模块定义给子模块用)-->
<dependencyManagement>
<dependencies>
<dependency></dependency>
</dependencies>
<build>
<!--插件列表-->
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</build>
<!--继承父模块-->
<parent></parent>
<!--聚合多个模块编译-->
<modules></modules>
</dependencyManagement>
</project>
依赖范围
三种类路径
编译,测试,运行
scope
compile:默认范围,编译测试运行都有效
provided:在测试和编译时有效
runtime:只在测试和运行时有效
test:只在测试时有效
system:只在测试和编译时有效,与本地环境关联,可移植性较差
import:导入的范围,只使用在dependencyManagement中,表示从其他的pom中导入dependecy的配置
依赖传递
bige<--nange<--shanji(默认依赖bige可以排除)
hongxing-bige的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.hongxing</groupId>
<artifactId>hongxing-bige</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hongxing-bige</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>
hongxing-nange的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.hongxing</groupId>
<artifactId>hongxing-nange</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hongxing-nange</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-bige</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>
hongxing-shanji的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.hongxing</groupId>
<artifactId>hongxing-shanji</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hongxing-shanji</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-nange</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
hongxing-shanji如果不想依赖hongxing-bige可以用下面的方式引入hongxing-nange
<dependency>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-nange</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-bige</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖冲突
短路优先
A-->B-->C-->X(jar)
A-->D-->X(jar)
会优先解析短的路径
上面hongxing-shanji默认的commons-io的版本会是hongxing-nange中的版本
路径长度相同,谁的dependacy先声明,谁先解析
A-->B--X(jar)
A-->D-->X(jar)
如果在A中先声明D就用D中的X.jar版本
聚合
可以建立一个聚合maven项目来管理hongxing-bige,hongxing-nange,hongxing-shanji
建立一个hongxing-allmaven项目,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.hongxing</groupId>
<artifactId>hongxing-all</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>hongxing-all</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<modules>
<module>../hongxingbige</module>
<module>../hongxingnange</module>
<module>../hongxingshanji</module>
</modules>
</project>
运行该项目,会将三个module的pom.xml都运行
继承
可以建立一个父maven项目来提供依赖给子项目继承,父类提供详细描述,子类只需填写groupId和artifactId即可引入依赖。
继承后各pom.xml(注意要先将父pom注册到仓库中)
hongxing-parent的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.hongxing</groupId>
<artifactId>hongxing-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>hongxing-parent</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.11</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
hongxing-bige的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.hongxing</groupId>
<artifactId>hongxing-bige</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hongxing-bige</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<parent>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>
hongxing-nage的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.hongxing</groupId>
<artifactId>hongxing-nange</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hongxing-nange</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<parent>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-bige</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>
hongxing-shanji的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.hongxing</groupId>
<artifactId>hongxing-shanji</artifactId>
<version>1.0-SNAPSHOT</version>
<name>hongxing-shanji</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<parent>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-nange</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.hongxing</groupId>
<artifactId>hongxing-bige</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
Maven知识点一览的更多相关文章
- Maven插件一览
maven-assembly-plugin 将对应模块依赖在 mvn package 阶段全部打到一个 jar 包里面: java -cp xx.jar package.name.MainClass ...
- Maven知识点积累二
①maven常用命令: mvn clean:清除target下编译生成的class文件 mvn compile:编译 mvn package:打包放到target下 mvn install:打包并放到 ...
- Maven知识点积累一
配置maven变量,变量名可以是:MAVEN_HOME 或 M2_HOME settings.xml配置本地仓库地址: <localRepository>G:/.m2/repository ...
- Maven知识点整理
1. 基础:maven 概念及生命周期 ===>Nexus创建本地Maven仓库(Maven私服) https://www.cnblogs.com/zishengY/p/7794923.html ...
- maven 知识点2
maven 命令: table th:first-of-type { width: 500px; } table th:nth-of-type(2) { } 命令 含义 mvn help:effect ...
- maven 知识点1
在POM 4中,dependency 中还引入了 scope,它主要管理依赖的部署.目前 scope 可以使用5个值: compile,缺省值,适用于所有阶段,会随着项目一起发布. provided, ...
- Maven知识点简要
1.依赖管理 <dependencies> <dependency> <groupId>net.sf.json-lib</groupId> < ...
- Maven 知识点总结以及解决jar报冲突的几种方法
1.常见的命令 Compile Test Package Install Deploy Clean 2.坐标的书写规范 groupId 公司或组织域名的倒序 artifactId 项目名或模块名 ve ...
- 各数据库连接配置与maven依赖安装
maven用的比较多,所以自己去捣鼓了一下:以下是关于数据库配置的一块,把相关的内容张贴出来,以备不时之需 //MySql 配置文件(maven):pom.xml <dependency> ...
随机推荐
- Java性能调优实战,覆盖80%以上调优场景
Java 性能调优对于每一个奋战在开发一线的技术人来说,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 日渐复杂的系统,错综复杂的性能调优,都对Java工程师的技术广度和技术深度提出了更 ...
- 记一次 .NET游戏站程序的 CPU 爆高分析
一:背景 1. 讲故事 上个月有个老朋友找到我,说他的站点晚高峰 CPU 会突然爆高,发了两份 dump 文件过来,如下图: 又是经典的 CPU 爆高问题,到目前为止,对这种我还是有一些经验可循的. ...
- Mysql之读写分离架构-Atlas
Atlas介绍 1.png Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目. 它是在mysql-proxy 0.8.2版本的基础上, ...
- C语言头文件到底是什么?
C语言头文件到底是什么? 在C语言学习的时候总是会引入这样的语句#include <stdio.h>,书上解释说把stdio.h这个文件的全部内容直接插入到这个位置,然后再经过C语言的编译 ...
- 二. 简单初步认识SpringCloud
(一)微服务的实现方式很多,但是最火的莫过于Spring Cloud了.为什么? 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大. 技术强:Spring作为Java领域 ...
- 【yml】springboot 配置类 yml语法
参考:https://www.runoob.com/w3cnote/yaml-intro.html YAML 是 "YAML Ain't a Markup Language"(YA ...
- 【原创】Centos8使用ansible
目录 使用ansible发布公钥 ansible基本命令 ansbile配置文件详解 一.使用ansible发布公钥 1.0 生成秘钥对 1.生成命令 ssh-keygen -t rsa# 推送单个公 ...
- 从苏宁电器到卡巴斯基第12篇:我在苏宁电器当营业员 IV
卖iPhone首先是需要接受培训的 像iPhone这样的重点产品,并不是只要选好了人(营业员),说卖就能卖的,在正式销售之前需要接受厂家的培训.如果说人事关系或者产品源隶属于苹果,那么是由苹果中国公司 ...
- 病毒木马查杀实战第023篇:MBR病毒之引导区的解析
前言 引导型病毒指寄生在磁盘引导区或主引导区的计算机病毒.这种病毒利用系统引导时,不对主引导区的内容正确与否进行判别的缺点,在引导系统的过程中入侵系统,驻留内存,监视系统运行,伺机传染和破坏.按照引导 ...
- Linux下磁盘分区、卸载和磁盘配额
目录 一:查看磁盘信息 二:Linux磁盘分区 三:Linux分区的卸载 四:Linux磁盘配额 一:查看磁盘信息 fdisk : 这个命令是磁盘分区表操作工具,fdisk能将磁盘分区,同时也能为每个 ...