什么是Maven

Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的 缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项 目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用 Maven,而且 公司项目采用 Maven 的比例在持续增长。

在Maven中,可以理解为所有的项目都是一个个的对象。


Maven 与 IDE 的整合

window->Preferences->Maven->Installations,将下载好的的Maven工具添加。

添加后将其勾选,确定。




Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_远程仓库


指定Maven的配置文件。也可以将原setting.xml文件复制一份放入到其他文件夹中进行指定,并自定义配置本地仓库。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_02

点击ok


Maven 仓库与配置

Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服 务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存 储路径。

对于 Maven 来说,仓库分为两类:本地仓库和远程仓库。

远程仓库


远程仓库指通过各种协议如 file://和 http://访问的其它类型的仓库。这些仓库可能是第 三方搭建的真实的远程仓库,用来提供他们的构件下载(例如 repo.maven.apache.org 和
uk.maven.org 是 Maven 的中央仓库)。其它“远程”仓库可能是你的公司拥有的建立在文件 或 HTTP 服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布的。


本地仓库


本地仓库指本机的一份拷贝,用来缓存远程下载,包含你尚未发布的临时构件。


修改远程仓库


还是在之前外部的setting.xml文件中,找到mirrors标签,在该标签中添加子标签
<mirror>            
<!-- 指定镜像 ID -->   
<id>nexus-aliyun</id>         
<!-- 匹配中央仓库。 -->   
<mirrorOf>central</mirrorOf>   
<!-- 指定镜像名称 -->       
<name>Nexus aliyun</name>   
<!-- 指定镜像路径 -->   
<url>http://maven.aliyun.com/nexus/content/groups/public</url>    
</mirror>


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_maven 打包指定依赖包_03

在不修改的情况下默认找的Apache的中央远程仓库,国内好像屏蔽了,为了连接稳定,使用阿里云的中央仓库

仓库优先级

本地仓库,镜像仓库,中央仓库。

镜像仓库=中央仓库。 镜像仓库是用于替代中央仓库的。

仓库访问优先级:


本地仓库 
	第一访问本地仓库。 
指定仓库 
	如果本地仓库不存在对应信息,访问配置文件中指定的远程仓库。 这个远程仓库是第二优先级。 


远程仓库 
	镜像仓库 
		镜像仓库是 Maven 开发过程中的首选远程仓库,在本地仓库和指定仓库无法获取资源 的时候,直接访问镜像仓库。 
	中央仓库 
		如果镜像仓库不是中央仓库 ,则会在访问镜像仓库无法获取资源后,访问中央仓库。


访问流程


Maven在根据坐标查找jar包的时候,首先访问的是本地仓库,如果在本地仓库中没有包含坐标jar包,那么访问指定仓库。
在本地仓库和指定仓库无法获取资源的时候,访问镜像仓库,如果镜像仓库不是中央仓库,那么在访问镜像仓库无法获取资源后,访问中央仓库。


Maven工程类型


1、Maven 的工程类型 
	1.1、POM 工程 
		POM 工程是逻辑工程。用在父级工程或聚合工程中。用来做 jar 包的版本控制。 
	1.2、 JAR 工程 
		将会打包成 jar 用作 jar 包使用。即常见的本地工程 - Java Project。 
	1.3 、WAR 工程 
		将会打包成 war,发布在服务器上的工程。如网站或服务。
即常见的网络工程 - Dynamic Web Project。war 工程默认没有 WEB-INF 目录及 web.xml 配置文件,IDE 通常会显示工程错误,提供完整工程结构可以解决。


创建第一个Maven工程

创建纯净项目,不应用任何模板


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_远程仓库_04

选择开发工具的左上角,File-New-MavenProject

填写项目信息


Group Id 公司域名倒写 
Artifact Id 项目名 
Version 版本名 
Packaging 项目类型 
Jar  java 项目 
War : web 项目 
POM: 父项目.如果项目有子项目,项目必须是 pom 
Name : 自定义名称,内容任意 
Description: 描述.详细描述. 
Parent Project: 如果当前项目有父项目时填写


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_远程仓库_05

填写后,点击Finish就好了。

Maven工程结构


src/main/java 这个目录下储存 java 源代码 
 
src/main/resources 储存主要的资源文件。比如spring的xml配置文件和log4j的properties 文件。 
 
src/test/java 储存测试用的类,比如 JUNIT 的测试一般就放在这个目录下面 
 
src/test/resources 储存测试用的资源文件 
 
src 包含了项目所有的源代码和资源文件,以及其他项目相关的文件。 
 
target 编译后内容放置的文件夹 
 
pom.xml 是 Maven 的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等等


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_06


配置Pom.xml文件


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_远程仓库_07

不知道坐标的可以在mvnrepository网站搜索,版本可以选择使用人数最多的

Maven打包处理


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_maven 打包指定依赖包_08

第一打包时间可能会比较久,因为要下载驱动

Maven工程依赖关系,创建jar类型工程


即 A 工程开发或运行过程中需要 B 工程提供支持,则代表 A 工程依赖 B 工程。在这种 情况下,需要在 pom.xml 文件中增加下属配置定义依赖关系。
POM的配置文件
<dependencies>     
	<!-- 定义一个具体的依赖 -->     
	<dependency>       
<!-- 依赖的工程所在组名 -->      
 <groupId>groupName</groupId>      
 <!-- 依赖的工程名 -->      
 <artifactId>artifactName</artifactId>       
<!-- 依赖的工程版本 -->       
<version>versionNo</version>       
<!-- 依赖的工程有效范围,其可选值有:
		compile - 编译中有效  
		runtime - 运行中有效        
		system - 全部中有效[默认]         
		provided - 当前工程中有效. 
		test - 只在测试有效       -->      
 	        <scope>system</scope>    
 	</dependency>
 </dependencies>


A项目打包

选中项目,Run As--->Maven install,当控制台出现BUILD SUCCESS时就代表打包成功。可以从target中看到。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_09


在B项目中引入A项目。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_远程仓库_10

在Pom文件配置后,会生成A项目的jar文件。

在B项目中进行测试


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_远程仓库_11


Maven工程继承关系,创建pom类型工程


概念:
如果 A 工程继承 B 工程,则代表 A 工程默认依赖 B 工程依赖的所有资源,且可以应用 B 工程中定义的所有资源信息。被继承的工程(B 工程)只能是 POM 工程。
父工程:对项目资源做统一管理。
子工程:继承父工程,从父工程中的坐标中选择使用哪些来开发项目。

pom类型工程结构与jar工程结构不同


File - New -Maven Project,选择创建pom类型的工程,之后修改pom.xml文件。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_maven 打包指定依赖包_12

properties,该标签下可以定义任何子标签,标签名字可以任意填写。dependencyManagement,当前只是定义坐标不会将该坐标导入项目中

创建子工程


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_13


子工程继承父工程


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_jar_14


父工程的资源管理发生变化时


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_15


Maven工程聚合关系,创建pom项目


创建步骤和之前一样,在选择工程类型时选择pom工程。


创建聚合模块


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_远程仓库_16


创建完成后


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_17

在该工程下就有了要聚合的模块,接下来就需要配置pom.xml文件

聚合项目中的pom文件,modules里面有多个module标签,每个module标签就代表了一个聚合模块。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_maven 打包指定依赖包_18

可以配置多个module标签

当需要做打包处理时,只需要对聚合项目打包,其余子工程也会同时进行打包处理,清除同理。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_19


创建var项目

注意:如果开发版本工具过低,可能会报错。


创建步骤与之前基本相同,工程类型改为var类型。
var项目因为要发布,与其余的项目结构不同,在创建的时候就会报错,因为缺少WEB-INF文件,该文件需要手动进行创建。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_maven 打包指定依赖包_20

web.xml文件中可以不填写约束头信息也不会报错

Maven中常见插件

编译插件


需要注意的是该编译插件只对当前项目有效,也就是说你再创建新的项目的时候需要重新配置。


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_jar_21

配置pom.xml,该标签可以将jdk改为指定的版本。

settings.xml 文件中配置全局编译器插件


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_22

创建新的Maven项目时就不需要在pom.xml中进行配置了

Tomcat管理插件

本地应用


使用 Tomcat 插件发布部署并执行 war 工程的时候,使用 maven build 功能实现。
应用启 动命令为: tomcat7:run。命令中的 tomcat7 是插件命名,由插件提供商决定。run 为插件中 的具体功能。

具体 pom.xml 文件的配置如下:


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_maven 打包指定依赖包_23

groupId和artifactId标签内容固定

启动tomcat


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_24


测试


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_25


远程热部署


远程热部署是指,在Tomcat 容器运行过程中,动态实现war工程的部署,重新部署功能。
使用maven build功能实现,具体命令为:tomcat7:deploy或 tomcat7:redeploy。
其中 deploy 代表第一次部署 war 工程;redeploy 代表 Tomcat 容器中已有同名应用,本次操作为重新部署同名war工程。 
实现热部署需要远程访问 Tomcat 容器,所以 Tomcat 容器需要提供合适的访问方式和验证方式。 
实现热部署,需要访问 Tomcat 容器提供的原始应用 manager,并提供有效有权限的访问用户,所以在Tomcat中也需提供部分配置。具体配置内容如下:


在Tomcat 中的 conf/tomcat-users.xml 文件的配置


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_26


pom.xml 文件中的配置


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_jar_27


运行tomcat


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_28

ip地址

资源拷贝插件

Maven 在打包时默认只将 src/main/resources 里的配置文件拷贝到项目中并做打包处理, 而非 resource 目录下的配置文件在打包时不会添加到项目中 。如果配置文件不是在resource中,就在pom文件中进行配置。


<resources>
			<resource>
				<!-- directory,资源拷贝哪个目录下的 -->
				<directory>src/main/java</directory>
				<includes>
					<!-- include,包含什么。**/*.xml,当前目录以及子目录下的所有的.xml文件 -->
					<include>**/*.xml</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.xml</include>
					<include>**/*.properties</include>
				</includes>
			</resource>
		</resources>


Maven项目打包生成可执行jar包 且包含依赖包 maven打包时指定的依赖包_xml_29


Maven 常用命令

install


编译 – javac
打包 - jar 
将 java 代码打包为 jar 文件 安装到本地仓库 - 将打包的 jar 文件,保存到本地仓库目录中


Clean


清除已编译信息。  
删除工程中的 target 目录


Compile


只编译。


Deploy


项目部署。


Package


打包。