Maven

什么是 Maven

  • Maven:一个用于自动化构建项目和管理项目依赖的工具
  • 自动化构建项目:按照企业中主流的项目模板,创建完善的项目结构
  • 管理项目依赖( jar 包):配置式添加和管理,自动下载和导入

Maven 环境搭建

  • 前置环境:jdk 环境( Maven 3.3+ require JDK 1.7+)

  • Maven下载与配置

maven下载

我的电脑---->属性---->高级系统设置---->环境变量---->系统变量

---->系统变量中选中 Path 变量,编辑新建,添加值为 Maven 下的 bin 文件目录

---->命令行中输入 mvn -v,显示版本信息即配置成功

在这里插入图片描述

Maven 生命周期

Maven 生命周期即项目构建过程,可以通过命令行输入 mvn 相关命令进行操作,IDEA 可操作右侧 maven 选项

在这里插入图片描述
Maven 有以下三个标准的生命周期:

  • clean:项目构建之前的清理过程
  1. pre-clean:执行一些需要在 clean 之前完成的工作
  2. clean:移除所有上一次构建生成的文件
  3. post-clean:执行一些需要在 clean 之后立刻完成的工作

在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,如果执行 mvn clean 将运行 pre-clean, clean 两个生命周期阶段

  • default(或 build):项目编译和打包处理(主要生命周期)
生命周期阶段描述
validate(校验)校验项目是否正确并且所有必要的信息可以完成项目的构建过程
initialize(初始化)初始化构建状态,比如设置属性值
generate-sources(生成源代码)生成包含在编译阶段中的任何源代码
process-sources(处理源代码)处理源代码,比如说,过滤任意值
generate-resources(生成资源文件)生成将会包含在项目包中的资源文件
process-resources (处理资源文件)复制和处理资源到目标目录,为打包阶段最好准备
compile(编译)编译项目的源代码
process-classes(处理类文件)处理编译生成的文件,比如说对Java class文件做字节码改善优化
generate-test-sources(生成测试源代码)生成包含在编译阶段中的任何测试源代码
process-test-sources(处理测试源代码)处理测试源代码,比如说,过滤任意值
generate-test-resources(生成测试资源文件)为测试创建资源文件
test-compile(编译测试源码)编译测试源代码到测试目标目录
process-test-classes(处理测试类文件)处理测试源码编译生成的文件
test(测试)使用合适的单元测试框架运行测试(Juint是其中之一)
prepare-package(准备打包)在实际打包之前,执行任何的必要的操作为打包做准备
package(打包)将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件
pre-integration-test(集成测试前)在执行集成测试前进行必要的动作。比如说,搭建需要的环境
integration-test(集成测试)处理和部署项目到可以运行集成测试环境中
post-integration-test(集成测试后)在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境
verify (验证)运行任意的检查来验证项目包有效且达到质量标准。
install(安装)安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖
deploy(部署)将最终的项目包复制到远程仓库中与其他开发者和项目共享
  • site:项目报告、站点信息、发布环节
  1. pre-site:执行一些需要在生成站点文档之前完成的工作
  2. site:生成项目的站点文档
  3. post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  4. site-deploy:将生成的站点文档部署到特定的服务器上

执行 mvn site
在这里插入图片描述

settings.xml 全局配置文件

在这里插入图片描述
Maven 依赖搜索顺序

  1. 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作
  2. 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用
  3. 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)
  4. 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
          
          <localRepository>/path/to/local/repo</localRepository> // 配置本地仓库
          
		  <interactiveMode>true</interactiveMode> // 是否需要和用户交互,默认 true
		  
		  <offline>false</offline> // 是否需要启用离线模式,默认 flase
		  
		  <pluginGroup>com.your.plugins</pluginGroup> // 插件没有提供 groupId 时自动添加
		  
		  <proxies>  // 用于配置连接仓库的代理
			<proxy>
      			<id>optional</id>
     		 	<active>true</active>
      			<protocol>http</protocol>
      			<username>proxyuser</username>
      			<password>proxypass</password>
      			<host>proxy.host.net</host>
      			<port>80</port>
      			<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    		</proxy>
		  </proxy>
		  
		  <servers> // 远程仓库服务器在访问时所需的认证信息
    		<server>
      			<id>deploymentRepo</id>
      			<username>repouser</username>
      			<password>repopwd</password>
    		</server>
  		  </servers>
  		  
		  <mirrors> // 配置镜像仓库
    		<mirror>
      			<id>mirrorId</id>
      			<mirrorOf>repositoryId</mirrorOf>
      			<name>Human Readable Name for this Mirror.</name>
      			<url>http://my.repository.com/repo/path</url>
    	 	</mirror>
  		 </mirrors>
  		 
		 <profiles> // 完成一些特定环境下的定制化操作
    		<profile>
      			<id>jdk-1.4</id>

      			<activation> // 指定某些条件下自动切换 profiles 配置
        			<jdk>1.4</jdk>
      			</activation>

      			<repositories> // 配置远程仓库列表
        			<repository>
          				<id>jdk14</id>
          				<name>Repository for JDK 1.4 builds</name>
          				<url>http://www.myhost.com/maven/jdk14</url>
          				<layout>default</layout>
          				<snapshotPolicy>always</snapshotPolicy>
        			</repository>
     		 	</repositories>
    		</profile>
    		<profile>
      			<id>env-dev</id>

      			<activation>
        			<property>
          				<name>target-env</name>
          				<value>dev</value>
       			 	</property>
      			</activation>

      			<properties> // 声明扩展配置项
        			<tomcatPath>/path/to/tomcat/instance</tomcatPath>
      			</properties>
    		</profile>
  		 </profiles>  
  		 
		<activeProfiles> // 手动激活 profiles 配置
    		<activeProfile>alwaysActiveProfile</activeProfile>
    		<activeProfile>anotherAlwaysActiveProfile</activeProfile>
  		</activeProfiles>
</settings>

maven / conf / settings.xml 中配置本地仓库路径Default: ${user.home}/.m2/repository

<localRepository>D:\杂七杂八\蓝旭\apache-maven-3.8.1\usrlibs</localRepository>

maven / conf / settings.xml 中的 < mirrors >< /mirrors > 标签中配置国内 maven 镜像(阿里云镜像)

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

maven / conf / settings.xml 中的 < profiles >< /profiles > 标签中配置 jdk 版本

<profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>

IDEA 创建 Maven

在这里插入图片描述

在这里插入图片描述

Maven 项目目录结构
  • main : 该目录下存放的是该项目的主要代码文件,下面有三个文件夹,分别用来存放:
    • java:该目录用来存放 java 的源代码文件
    • resources:该目录主要用来存放项目的一些配置文件(比如 springxml 配置文件)。
    • webapp:该目录相当于 web 项目下 webcontent 的目录,用来存放 jsp、web.xml 等文件.
  • test :该目录用来存放项目的测试文件
    • java:该目录主要存放该项目的测试所用的 java 源代码。
    • resources:该目录存放测试使用的资源文件。
  • pom.xml

File---->New---->Project使用骨架

在这里插入图片描述
main 目录下手动创建 java 等文件,src 下创建 test 文件

在这里插入图片描述

File---->New---->Project不使用骨架

在这里插入图片描述
main 目录下手动创建 webapp 等文件

在这里插入图片描述

File---->Project Structure---->Modules

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
需要补齐 web.xmlpom.xml 中的一些配置

pom.xml 项目配置文件

POM ( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个 XML 文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

  <groupId>org.example</groupId> // 所属组织名
  <artifactId>mavenDemo</artifactId> // 项目名
  <version>1.0-SNAPSHOT</version> // 使用版本号
  <packaging>war</packaging> // 项目打包形式

通过坐标 gavgroupId,artifactId,version )寻找项目或依赖

在这里插入图片描述

配置 jar 包依赖

搜索所需 jar 包---->复制依赖代码---->加入到 pom.xml 中的 < dependencies>< /dependencies> 标签中

在这里插入图片描述

依赖范围

在项目发布过程中,帮助决定哪些构件被包括进来

<scope></scope>
scope编译运行测试打包
compileYYYY
providedYNYN
runtimeNYYY
testNNYN
systemYNYN
  • compile:默认范围,编译,运行,测试,打包阶段时有效
  • provided:类似于编译,用于编译和测试阶段,运行阶段时该依赖由服务器提供,打包时无效
    例如:servlet-api.jartomcat 服务器会⾃带 servlet-api.jar
  • runtime:运行,测试,打包阶段有效
    例如:jdbc 驱动
  • test:只在测试阶段有效
    例如:junit.jar
  • system:类似 provided,需要外在提供相应的元素。通过 systemPath 来取得
    例如:本地 jar
  • systemPath:仅用于范围为 system 提供相应的路径
  • optional:当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用

pom 标签详解

传递依赖与排除依赖
  • 传递依赖:如果我们的项目引用了一个 jar 包,而该 jar 包又引用了其他 jar 包,那么在默认情况下项目编译时,Maven 会把直接引用和间接引用的 jar 包都下载到本地。
  • 排除依赖:如果我们只想下载直接引用的 jar 包,那么需要在 pom.xml 中做如下配置:(将需要排除的 jar 包的坐标写在中)
<exclusions>
   <exclusion>
      <groupId>xxx</groupId>
      <artifactId>xxx</artifactId>
      <version>xxx</version>
   </exclusion>
</exclusions>
依赖冲突

若项目中多个 jar 同时引用了相同的 jar (版本不同)时,会产生依赖冲突,解决策略

  1. 短路优先
本项目——>A.jar——>B.jar——>X.jar
本项目——>C.jar——>X.jar

引用 CX.jar

  1. 声明优先
    若引用路径长度相同时,在 pom.xml 中谁先被声明,就使用谁
聚合

多个项目同时运行称为聚合( IDEA 创建聚合工程
需在 pom.xml 设置

<modules>
    <module>../a</module>
    <module>../b</module>
</modules>
继承

在聚合多个项目时,如果这些被聚合的项目中需要引入相同的 jar ,那么可以将这些 jar 写入父 pom 中,各个子项目继承该 pom 即可

mvn help:effective-pom  // 查看父 pom 配置命令
  • 父 pom 配置:将需要继承的 jar 包的坐标放入标签
<dependencyManagement>
    <dependencies>
          <dependency>
            <groupId>.....</groupId>
            <artifactId>.....</artifactId>
            <version>.....</version>
          </dependency> 
    </dependencies>
</dependencyManagement>
  • 子 pom 配置:
<parent>
      <groupId>父pom所在项目的groupId</groupId>
      <artifactId>父pom所在项目的artifactId</artifactId>
      <version>父pom所在项目的版本号</version>
</parent>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值