Maven的介绍及使用
一、Maven简介
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理,是一个自动化构建工具。
自动化构建工具:将原材料(java、js、css、html....)->产品(可发布项目)
编译-打包-部署-测试 -> 自动构建
Maven的作用:
1、管理jar包
- 增加第三方jar包(不需要自己下载jar包)
- 管理jar包之间的依赖关系(maven自动关联下载所有依赖的jar包)
2、将项目拆分成若干个模块:借助于Maven可以将一个项目拆分成多个工程。(例如爱洋葱)
Maven能干的事情:
清理:删除编译的结果,为重新编译做准备。
编译:java->class
测试:针对于项目中的关键点进行测试,也可用项目中的测试代码去测试开发代码
报告:将测试结果进行显示
打包:将项目中包含的多个文件压缩成一个文件,用于安装或部署(java项目打成一个jar包,web项目打成一个war包,父工程-pom)
安装:将打成的包,放到本地仓库,供其他项目使用。
部署:将打成的包,放到服务器上,准备运行。
Eclipse中的项目,要在Tomcat中运行,需要部署:
a、通过eclipse中add and remove按钮进行部署
b、将Web项目打成一个war包,然后将该war包复制到Tomcat/webapps中即可
通常下载一个jar包,先在本地仓库中下载,如果本地仓库中不存在,则再联网到中央仓库(镜像)去下载。
约定配置:
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:
二、Maven POM
POM(项目对象模型) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。POM 中可以指定以下配置:
项目依赖
插件
执行目标
项目构建profile
项目版本
项目开发者列表
相关邮件列表信息
在创建 POM 之前,我们首先需要描述项目组 (groupId), 项目的唯一ID。
所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。
通过groupId,artifactId,version可以在本地仓库唯一标识一个模块。
三、依赖
A中的某些类,需要使用B中的某些类,则称为A依赖B
在maven项目中,如果要使用一个当时不存在的jar或模块,则可以通过依赖实现(去本地仓库、远程仓库去寻找)
1、依赖的范围、依赖的有效性:
Compile(默认) test provided
2、依赖排除
3、依赖的传递性
A.jar->B.jar->C.jar
要使A.jar->C.jar:当且仅当 B.jar依赖于C.jar的范围是compile
多个maven项目(模块)之间如何依赖:p项目<-q项目
- p项目install到本地仓库
- q项目依赖,在pom.xml中放入p项目的坐标:
1 <dependency>
2
3 <groupId>aa.test</groupId>
4
5 <artifactId>HelloWorld</artifactId>
6
7 <version>0.0.1-SNAPSHOT</version>
8
9 </dependency>
4、依赖原则
a、最短路径优先原则
b、路径长度相同:
i、在同一个pom.xml文件中有2个相同的依赖,则后面的依赖会覆盖前面的 依赖(严禁使用本情况)
ii、如果是不同的pom.xml中有2个相同的依赖,则先声明的依赖会覆盖后 声明的依赖
改eclipse中jdk的版本:
在maven的安装目录中,打开setting.xml,在<profiles>节点下,加入以下代码:
1 <profile>
2
3 <id>jdk-1.8</id>
4
5 <activation>
6
7 <activeByDefault>true</activeByDefault>
8
9 <jdk>1.8</jdk>
10
11 </activation>
12
13 <properties>
14
15 <maven.compiler.source>1.8</maven.compiler.source>
16
17 <maven.compiler.target>1.8</maven.compiler.target>
18
19
20 <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
21
22 </properties>
23
24 </profile>
然后再在eclipse中创建maven工程时,jdk就是1.8的了。
改pom.xml文件中的依赖的版本:
首先在根节点中插入<properties></properties>节点,然后在这个节点里,添加类似这样的版本号信息:
<spring.version>4.1.5.RELEASE</spring.version>
<lucene.version>3.6.2</lucene.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>(这个是文件的编码)
然后在依赖中,写成以下形式(类似于EL表达式):
1 <dependency>
2
3 <groupId>org.springframework</groupId>
4
5 <artifactId>spring-context</artifactId>
6
7 <version>${spring.version}</version>
8
9 </dependency>
四、命令
执行mvn命令:必须在pom.xml所在目录执行
Maven常见命令:
mvn compile --只编译main目录中的java文件
mvn test 测试,运行的是test/java中的代码
mvn package 打成 jar/war包,放在项目的target文件夹中
mvn install 将开发的模块放入本地仓库,供其他模块使用(放入的位置,是通过gav决定)
mvn clean 删除target目录(删除编译文件目录)
mvn deploy 将项目部署到Tomcat中,然后即可运行。
在eclipse中创建maven工程:
1、配置maven:
配置maven版本(不用自带的,用自己安装的)
配置本地仓库:设置settings.xml
如果执行package命令,则依次执行resources、compile、test、package命令。
Maven生命周期:
生命周期中的顺序:a b c d e
当我们执行c命令,则实际执行的是a b c
生命周期包含的阶段:3个阶段
clean 生命周期:清理
pre-clean clean post-clean
default 生命周期:默认
site 生命周期:站点
pre-site site post-site site-deploy
五、继承
使用继承,可以通过父工程,统一管理依赖的版本。
1、创建父工程:父工程的打包方式为pom
2、在父工程的pom.xml中编写依赖:
1 <dependencyManagement>
2 <dependencies>
3 <dependency>
4 ......
5 </dependency>
6 </dependencies>
7 </dependencyManagement>
3、在子工程中加入父工程的gav(写在<parent/>标签中)。
4、在子工程的pom.xml中写入<relativePath>../B/pom.xml</relativePath>(子工程pom相对于父工程pom的相对路径)
5、在子工程中需要声明:使用父工程的哪些依赖:
<dependency>
<groupId>..</groupId>
<artifactId>..</artifactId>
</dependency>(只需要ga,不需要v了)
六、聚合
Maven2项目依赖于maven1项目,则在执行时,必须先将maven1加入到本地仓库中(install),之后才能执行maven2。
以上前置工程(maven1)的install操作,可以交由“聚合”一次性搞定。
聚合的使用:
在一个总工程中配置聚合:(聚合的配置,只能配置在打包方式为pom的Maven工程中)
1 <!-- 配置聚合,避免前置工程的install操作 -->
2
3 <modules>
4
5 <module>../Maven1</module>
6
7 <module>../Maven2</module>
8
9 </modules>
配置完聚合之后,以后只要操作总工程,则会自动操作总工程中配置过的工程。(只要install了总工程,则子工程都会install)
七、部署
正常部署:
首先将maven的web项目打包(打成war包,结果在项目根目录的target文件夹里),然后将war包复制到tomcat的webapps文件夹中,启动tomcat即可运行。
Maven部署:
1、配置cargo
在pom.xml中加入以下内容:
1 <build>
2
3 <finalName>MyWebProject</finalName><!-- 工程名 -->
4
5 <plugins>
6
7 <plugin>
8
9 <groupId>org.codehaus.cargo</groupId><!-- 启动tomcat -->
10
11 <artifactId>cargo-maven2-plugin</artifactId>
12
13 <version>1.4.9</version>
14
15 <configuration>
16
17 <container>
18
19 <containerId>tomcat8x</containerId>
20
21 <home>E:\Tomcat 9\apache-tomcat-9.0.14</home>
22
23 </container>
24
25 <configuration>
26
27 <type>existing</type>
28
29 <home>E:\Tomcat 9\apache-tomcat-9.0.14</home>
30
31 <!-- 默认8080 -->
32
33 <!-- <properties> -->
34
35 <!-- <cargo.servlet.port>8888</cargo.servlet.port> -->
36
37 <!-- </properties> -->
38
39 </configuration>
40
41 </configuration>
42
43 <executions>
44
45 <execution>
46
47 <id>cargo-run</id>
48
49 <phase>install</phase>
50
51 <goals>
52
53 <goal>run</goal>
54
55 </goals>
56
57 </execution>
58
59 </executions>
60
61 </plugin>
62
63 </plugins>
64
65 </build>
2、Maven命令:deploy
然后run as->maven build...->deploy,然后打开浏览器,输入localhost:8080/项目名称/,即可运行。
Maven的介绍及使用的更多相关文章
- Maven详细介绍
Maven 目录 1 什么是Maven? 2 Maven 的好处 3 获取和安装 3.1 获取 3.2 安装 3.2.1 环境变量的配置 4 设置本地仓库 5 创建简单的Maven实例 5.1 使用骨 ...
- 学习笔记——Maven实战(八)常用Maven插件介绍(下)
我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...
- maven仓库介绍
maven仓库介绍 http://juvenshun.iteye.com/blog/359256
- maven系列(1)-maven的介绍与安装
maven的介绍 maven是大名鼎鼎的Apache下的java构建工具. Apache Maven is a software project management and comprehensio ...
- maven的介绍及如何获取jar包
本文转载自 https://www.cnblogs.com/whgk/p/7112560.html 该篇文章篇幅较长,大概的思路如下 maven的介绍,初步认识,获取jar包的三个关键属性 --& ...
- Maven实战(八)——常用Maven插件介绍(下)
我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...
- maven的介绍以及使用
maven的介绍以及使用 1.什么是maven maven是一个项目管理工具,一个依赖管理系统,maven通过项目对象模型来管理jar包(POM.xml文件) 2.maven的优点 1.maven使用 ...
- Maven实战(七,八)——经常使用Maven插件介绍
我们都知道Maven本质上是一个插件框架,它的核心并不运行不论什么详细的构建任务,全部这些任务都交给插件来完毕,比如编译源代码是由maven-compiler-plugin完毕的.进一步说,每一个任务 ...
- (三)Maven仓库介绍与本地仓库配置
1.Maven本地仓库/远程仓库的基本介绍 示意图: 本地仓库是指存在于我们本机的仓库,在我们加入依赖时候,首先会跑到我们的本地仓库去找,如果找不到则会跑到远程仓库中去找.对于依赖的包大家可以从这个地 ...
- Maven 使用介绍
1,创建Project 先去官方网站下载一个最新版本http://maven.apache.org/download.cgi. 下载后解压,使用之前最好先将maven的bin目录设置到path环境变量 ...
随机推荐
- Arduino 中 EEprom 写入读取清除
转自:https://www.arduino.cn/thread-1157-1-1.html EEPROM (Electrically Erasable Programmable Read-Only ...
- 玩转 SpringBoot2.x 之整合 thumbnailator 图片处理
1.序 在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的.最近,阿淼就被要求实现这个功能,原因是客户那边嫌速度过慢.借此机会,阿淼今儿 ...
- excel——VlookUp函数的使用
VlookUp函数,查询两个表中的相同字段数据,并将需要引用的数据从B表填充到A表 1.打开A表,将需要查询的列选中 在需要引用的列输入 = 在上方,函数选择中选择VLOOKUP函数 Windows: ...
- pycharm 解决PEP8问题,配置autopep8到菜单栏
autopep8是一个可以将Python代码自动排版为PEP8风格第三方包,使用它可以轻松地排版出格式优美整齐的代码.网络上有很多介绍如何在pycharm中配置autopep8的方案,但很多方案中还是 ...
- 【源码项目】C语言编程之火车票管理系统!(最强代码)
大学计算机软件技术基础课程设计任务书 一.题目: 火车票信息管理系统: 二.目的与要求 : ● 目的培养学生综合利用C++语言进行程序设计的能力, ● 培养学生的编程能力.用计算机解决实际问题的能力, ...
- 【线段树】BZOJ 5334 数学计算
题目内容 小豆现在有一个数\(x\),初始值为\(1\).小豆有\(Q\)次操作,操作有两种类型: 1 m:\(x=x×m\),输出\(x\ mod\ M\): 2 pos:\(x=x/\)第\(po ...
- PHP转Go系列:数组与切片 转
数组的定义# 用过PHP的同学应该很清楚,无论多么复杂的数据格式都可以用数组来表达,什么类型的数据都可以往里塞,它是工作必备的一部分,使用很简单,易用程度简直变态. Copy $array = [1, ...
- phpstorm 使用xdebug
一.在phpstudy配置 开启xdebug的zend扩展,在php.ini 中添加下面的代码: [xdebug] zend_extension = "D:\phpstudy_pro\Ext ...
- python web自动化上传文件工具
工具下载地址:链接:https://pan.baidu.com/s/1cHdNHW 密码:56bp说明:1.WinSpy-1.0.2.7z解压即可.2.pywin32的exe程序,根据自己安装的pyt ...
- 【Flutter 混合开发】与原生通信-BasicMessageChannel
Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...