Maven技术(一)

一、概述

Maven翻译为“专家”。它是Apache下的一个纯Java开发的项目管理工具。使用Maven对Java项目进行构建和依赖管理。

Maven的优点:

  • 一步构建;
  • 依赖管理;
  • 跨平台;
  • 有利于提高大型团队的开发效率;

1.1 什么是项目构建

项目构建就是一个项目从编写源代码开始,到编译、测试、运行、打包、部署的过程。
在这里插入图片描述

Maven项目的构建过程:
在这里插入图片描述
Maven将项目构建的过程进行标准化,每个阶段都使用一个命令完成。例如:
clean:清理阶段命令。
compile:编译阶段命令。
package:打包阶段命令。

二、Maven安装

2.1 软件下载

下载地址:http://maven.apache.org/download.cgi

下载完成后的目录结构如下图所示:
在这里插入图片描述
bin:保存了maven相关的命令,例如:mvn.bat。
boot:maven运行需要的类加载器;
conf:setting.xml整个maven工具的核心配置文件;
lib:maven运行依赖的jar包;

2.2 配置MAVEN_HOME环境变量

MAVEN3.3以上版本需要安装JDK.17+版本。同时,需要还需要配置JAVA_HOME和MAVEN_HOME环境变量。
在这里插入图片描述
把Maven的bin目录路径添加到path环境变量中。
在这里插入图片描述
配置完成后,打开命令窗口,输入“mvn -v”命令。界面效果如下图所示:
在这里插入图片描述

2.3 配置仓库

2.3.1 配置仓库的作用

Maven仓库相当于一个文件服务器。它是用来保存jar包文件的地方。

Maven仓库分为三种:本地仓库、远程仓库和中央仓库。

  • 本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包。项目使用的一些插件和jar包应该优先从本地仓库中下载。
  • 远程仓库:如果本地仓库没有想要的插件或jar包,那么,maven就会去远程仓库中下载。
  • 中央仓库:在Maven工具中内置了一个远程仓库(http://repo1.maven.org/maven2),它就是一个中央仓库,用于服务全球的Maven用户。它里面包含了非常全的jar包,包含了世界上大部分流行的开源项目构件。该仓库是由Maven团队负责维护。

2.3.2 配置仓库路径

修改MAVEN_HOME/conf/settings.xml配置文件,然后查找localRepository节点,该节点就是maven本地仓库的路径。
在这里插入图片描述

三、搭建Maven项目

3.1 搭建Java项目

搭建命令:

mvn archetype:generate [参数列表]

参数说明:
-DarchatypeCatelog=internal
-DgroupId=com.xjy.maven.quickstart
-DartifactId=simple
-DarchetypeArtifactId=maven-archetype-quickstart
-Dversion=0.1.1-snapshot
在这里插入图片描述
例如:
在这里插入图片描述
运行的时候提示确认信息,输入“y”即可。
在这里插入图片描述
创建成功后,项目的目录结构如下图所示:
在这里插入图片描述
src/main/java : java的源代码
src/main/test : 测试源码目录
pom.xml : 项目配置文件

3.2 搭建Web项目

搭建命令:

mvn archetype:generate [参数列表]

参数说明:
-DarchatypeCatelog=internal
-DgroupId=com.xjy.maven.quickstart
-DartifactId=simpleweb
-DarchetypeArtifactId=maven-archetype-webapp
-Dversion=0.1.1-snapshot

例如:
在这里插入图片描述
运行时候提示确认信息,输入“y”即可。
在这里插入图片描述
安装完成后,项目目录结构如下图所示:
在这里插入图片描述
src/main/webapp # web的根目录
src/main/resources #web的配置文件目录
src/main/webapp/WEB-INF web项目的配置目录

四、Maven命令详解

4.1 生命周期

maven项目的构建过程一般经历了以下阶段:
在这里插入图片描述
每个阶段都对应一个Maven命令,例如:编译(compile)、测试(test)、package(打包)、安装(install)、部署(deploy)。

执行命令会将该命令在生命周期当中之前的阶段自动执行。例如:执行mvn test命令的时候,会自动执行mvn compile命令。

4.2 常用命令

(1)mvn compile
进入maven项目的根路径,执行mvn compile命令。
在这里插入图片描述
执行成功后,会生成一个target目录。该目录存放了编译后的文件。
在这里插入图片描述

(2)mvn test
修改com.xjy.maven.quickstart.AppTest类的testApp方法。

public void testApp()
{
    //assertTrue( true );
	System.out.println("hello maven...");
}

在命令窗口进入simple目录,然后执行mvn test命令。执行效果如下图所示:
在这里插入图片描述

(3)mvn package
执行该命令后,maven会在target目录下生成项目的jar包。
在这里插入图片描述
执行该命令的时候,会自动执行编译、测试命令。如果不想运行测试命令,可以在mvn package命令后面添加-Dmaven.test.skip=true参数。

(4)mvn install
该命令用于将项目打包成构件,并安装到本地的maven仓库中。

(5)mvn deploy
该命令用于把项目发布到本地仓库或服务器,例如:Tomcat服务器。

五、在Eclipse中使用m2eclipse插件

m2eclipse插件为Eclipse提供了Maven的集成。如果是使用新版本的Eclipse工具,默认就已经安装了m2eclipse插件。

5.1 配置maven环境

(1)配置maven安装目录。
在这里插入图片描述
(2)配置maven仓库位置。
在这里插入图片描述
(3)重构索引

在Eclipse中打开Maven Repositories视图:
在这里插入图片描述
鼠标右键选择本地仓库,然后选择Rebuild Index即可。

5.2 创建maven工程

第一步:新建一个Maven工程。
在这里插入图片描述
在这里插入图片描述
如果勾选了create a simple project,那么就直接跳到第三步。

(2)选择项目骨架。
在这里插入图片描述
(3)输入项目信息。
在这里插入图片描述
配置完成后,点击Finish即可。

5.3 配置Tomcat运行项目

(1)添加servlet和jsp的依赖。

<dependencies>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>2.5</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.1</version>
		<scope>provided</scope>
	</dependency>
</dependencies>

(2)添加相关插件。

<build>
	<plugins>
		<!-- 资源文件拷贝插件 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-resources-plugin</artifactId>
			<version>2.7</version>
			<configuration>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>
		
		<!-- java编译插件 -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.2</version>
			<configuration>
				<source>1.7</source>
				<target>1.7</target>
				<encoding>UTF-8</encoding>
			</configuration>
		</plugin>

		<!-- 配置Tomcat插件 -->
		<plugin>
			<groupId>org.apache.tomcat.maven</groupId>
			<artifactId>tomcat7-maven-plugin</artifactId>
			<configuration>
				<port>80</port>
				<path>/</path>
			</configuration>
		</plugin>
	</plugins>
</build>

(3)运行项目。
在这里插入图片描述
设置Goals:
在这里插入图片描述

5.4 运行过程中可能遇到的问题

5.4.1

运行时候可能会出现以下错误:
在这里插入图片描述
解决办法:在JRE添加下面配置信息。

-Dmaven.multiModuleProjectDirectory=MAVEN_HOME

配置效果:
在这里插入图片描述

5.4.2 从远程仓库下载相关jar包超时

解决办法:修改maven仓库的镜像地址。

<mirror>
	<id>alimaven</id>
 	<name>aliyun maven</name>
 	<url> http://maven.aliyun.com/nexus/content/groups/public/</url>
 	<mirrorOf>central</mirrorOf>    
</mirror> 

六、Maven配置详解

6.1 仓库

maven仓库:本地仓库、中央仓库、第三方仓库。

本地仓库:供Eclipse使用。本地仓库是保存在本地磁盘上。项目使用的jar包应该优先从本地仓库中加载。
在这里插入图片描述
中央仓库:供Maven下载到本地仓库使用,中央仓库是由Maven团队自己来维护。
在这里插入图片描述
第三方仓库:称为“私服”。一般是由公司内部人创建的,只提供给公司内部员工使用。
在这里插入图片描述

6.2 Maven下载jar包流程

如果配置了本地仓库,maven会根据坐标从本地仓库中查找jar包。如果本地仓库中没有指定jar包,才会从中央仓库中查找。如果中央仓库中有相应的jar包,那么就会把该jar包下载到本地仓库中,然后再提供给用户使用。
在这里插入图片描述
如果配置了私服,那么如果本地仓库没有指定jar包,就会从私服中查找相应的jar包。如果私服也没有,才会从中央仓库中查找。如果中央仓库中有相应jar包,那么就会下载到私服中保存起来,然后再提供给本地仓库保存,最后本地仓库再提供给用户使用。
在这里插入图片描述

6.3 POM全景图

POM的英文全名为Project Object Model,即项目对象模型,它是maven项目的核心配置文件。在POM文件中可以定义项目的坐标、项目依赖、项目信息、插件等等。
在这里插入图片描述
完整的POM文件:

<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!-- 项目名称,一般是公司域名的倒写 -->
	<groupId>com.entor</groupId>
	<!-- 模块名称 -->
	<artifactId>maven-day01</artifactId>
	<!-- 产品的版本号 -->
	<version>0.0.1-SNAPSHOT</version>
	<!-- 打包方式,一般是jar、war、pom三种方式 -->
	<packaging>war</packaging>

	<!-- 配置依赖关系 -->
	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

	<!-- 项目构建配置 -->
	<build>
		<!-- 配置插件 -->
		<plugins>
			<!-- 资源文件拷贝插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.7</version>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- 配置Tomcat插件 -->
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>80</port>
					<path>/</path>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

6.4 坐标

6.4.1 什么是坐标

每个Maven工程都需要定义本工程的坐标。坐标是Maven对jar包的身份定义。

定义坐标的格式:

<dependency>
	<groupId></groupId>
	<artifactId></artifactId>
	<version></version>
	<scope></scope>
</dependency>

groupId:项目名,一般是公司域名的倒写
artifactId:模块名
version:产品版本号
scope:依赖范围,它的值可以是compile、test、provided、runtime、system
在这里插入图片描述
如果没有指定依赖范围,默认就是compile范围。

6.4.2 查找坐标

第一种方式:在互联网上查找(比如:http://mvnrepository.com)。
在这里插入图片描述
第二种方式:使用Maven插件的索引功能。
在这里插入图片描述
输入groupId或artifactId的信息。如果本地仓库中有对应jar包,就会显示该jar包的所有版本。然后用户只需要选择对应版本的jar包即可。
在这里插入图片描述

6.5 依赖冲突问题

6.5.1 什么是依赖冲突

假如在我们的Maven项目中加入Struts2-core-2.3.14的依赖,结果发现所有关于Struts2的依赖都加进来了。
在这里插入图片描述
因为我们的项目依赖了struts2-core-2.3.14.jar,而struts2-core-2.3.14.jar会依赖xwork-core-2.3.14.jar、commons-lang3.3.2.jar等等,所以这些依赖的jar包也会出现在我们的Maven工程中。如果项目中依赖的jar包也依赖了其他版本的jar包,就可能会出现依赖冲突的问题。比如说,spring-web依赖了spring-core-4.2.4.RELEASE,而spring-test也依赖了spring-core-3.2.0.RELEASE。

6.5.2 解决依赖冲突

(1)依赖调节
依赖调节的原则:路径近者优先原则和第一声明者优先原则。

  • 示例1:

假如A项目依赖B项目依赖C1项目,而且A项目又直接依赖了C2项目,如果按照路径近者优先的原则,C2优先被项目A所依赖。

  • 示例2:

假如A项目依赖了B1项目,而且A项目又依赖了B2项目,如果按照第一声明者优先原则,谁先声明谁就会优先被依赖。

(2)排除依赖
上面示例1也可以通过手动排除方式,指定A项目不依赖C1项目。我们可以在dependency节点中指定exclusions子节点来指定不需要依赖的jar包。

例如:
在这里插入图片描述
(3)锁定版本
锁定版本可以使得用户无需考虑依赖路径、声明优先等因素,Maven会使用指定版本的jar包。此方法在企业开发中应用较多。例如:
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值