什么是Maven
Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具。 Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的 缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项 目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用 Maven,而且 公司项目采用 Maven 的比例在持续增长。
在Maven中,可以理解为所有的项目都是一个个的对象。
Maven 与 IDE 的整合
window->Preferences->Maven->Installations,将下载好的的Maven工具添加。
添加后将其勾选,确定。
指定Maven的配置文件。也可以将原setting.xml文件复制一份放入到其他文件夹中进行指定,并自定义配置本地仓库。
点击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>
在不修改的情况下默认找的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工程
创建纯净项目,不应用任何模板
选择开发工具的左上角,File-New-MavenProject
填写项目信息
Group Id 公司域名倒写
Artifact Id 项目名
Version 版本名
Packaging 项目类型
Jar java 项目
War : web 项目
POM: 父项目.如果项目有子项目,项目必须是 pom
Name : 自定义名称,内容任意
Description: 描述.详细描述.
Parent Project: 如果当前项目有父项目时填写
填写后,点击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 的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等等
配置Pom.xml文件
不知道坐标的可以在mvnrepository网站搜索,版本可以选择使用人数最多的
Maven打包处理
第一打包时间可能会比较久,因为要下载驱动
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中看到。
在B项目中引入A项目。
在Pom文件配置后,会生成A项目的jar文件。
在B项目中进行测试
Maven工程继承关系,创建pom类型工程
概念:
如果 A 工程继承 B 工程,则代表 A 工程默认依赖 B 工程依赖的所有资源,且可以应用 B 工程中定义的所有资源信息。被继承的工程(B 工程)只能是 POM 工程。
父工程:对项目资源做统一管理。
子工程:继承父工程,从父工程中的坐标中选择使用哪些来开发项目。
pom类型工程结构与jar工程结构不同
File - New -Maven Project,选择创建pom类型的工程,之后修改pom.xml文件。
properties,该标签下可以定义任何子标签,标签名字可以任意填写。dependencyManagement,当前只是定义坐标不会将该坐标导入项目中
创建子工程
子工程继承父工程
父工程的资源管理发生变化时
Maven工程聚合关系,创建pom项目
创建步骤和之前一样,在选择工程类型时选择pom工程。
创建聚合模块
创建完成后
在该工程下就有了要聚合的模块,接下来就需要配置pom.xml文件
聚合项目中的pom文件,modules里面有多个module标签,每个module标签就代表了一个聚合模块。
可以配置多个module标签
当需要做打包处理时,只需要对聚合项目打包,其余子工程也会同时进行打包处理,清除同理。
创建var项目
注意:如果开发版本工具过低,可能会报错。
创建步骤与之前基本相同,工程类型改为var类型。
var项目因为要发布,与其余的项目结构不同,在创建的时候就会报错,因为缺少WEB-INF文件,该文件需要手动进行创建。
web.xml文件中可以不填写约束头信息也不会报错
Maven中常见插件
编译插件
需要注意的是该编译插件只对当前项目有效,也就是说你再创建新的项目的时候需要重新配置。
配置pom.xml,该标签可以将jdk改为指定的版本。
settings.xml 文件中配置全局编译器插件
创建新的Maven项目时就不需要在pom.xml中进行配置了
Tomcat管理插件
本地应用
使用 Tomcat 插件发布部署并执行 war 工程的时候,使用 maven build 功能实现。
应用启 动命令为: tomcat7:run。命令中的 tomcat7 是插件命名,由插件提供商决定。run 为插件中 的具体功能。
具体 pom.xml 文件的配置如下:
groupId和artifactId标签内容固定
启动tomcat
测试
远程热部署
远程热部署是指,在Tomcat 容器运行过程中,动态实现war工程的部署,重新部署功能。
使用maven build功能实现,具体命令为:tomcat7:deploy或 tomcat7:redeploy。
其中 deploy 代表第一次部署 war 工程;redeploy 代表 Tomcat 容器中已有同名应用,本次操作为重新部署同名war工程。
实现热部署需要远程访问 Tomcat 容器,所以 Tomcat 容器需要提供合适的访问方式和验证方式。
实现热部署,需要访问 Tomcat 容器提供的原始应用 manager,并提供有效有权限的访问用户,所以在Tomcat中也需提供部分配置。具体配置内容如下:
在Tomcat 中的 conf/tomcat-users.xml 文件的配置
pom.xml 文件中的配置
运行tomcat
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 常用命令
install
编译 – javac
打包 - jar
将 java 代码打包为 jar 文件 安装到本地仓库 - 将打包的 jar 文件,保存到本地仓库目录中
Clean
清除已编译信息。
删除工程中的 target 目录
Compile
只编译。
Deploy
项目部署。
Package
打包。