Maven工具(一)

79 阅读5分钟

1. 介绍

Maven是java语言编写的,maven使用项目对象模型(POM)概念管理,可以通过一小段描述文件来管理项目的构建、报告和文档。在Maven中每个项目都相当于一个对象,对象与对象之间是有关系的,包含了:依赖、继承、聚合。实现Maven项目可以更方便地实现导jar包,拆分项目等效果。 image.png Maven的作用: 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间版本冲突问题 项目构建:提供标准的,快速的,跨平台的自动化构建方式 统一开发结构:提供标准的、统一的项目结构

2. 安装

IDEA工具自带或者官网下载,Windows系统下载zip包解压缩。 image.png 解压后的目录结构 image.png bin:存放Maven命令 boot:存放Maven自身的引导程序,类加载器 conf:存放Maven配置文件 lib:存放Maven本身运行所需的jar包

如果想在命令行使用Maven,要将包含bin文件夹的目录配置到环境变量 image.png image.png 然后,终端执行mvn -v命令,得到以下输出则安装成功 image.png

Maven仓库

maven是基于坐标机制管理依赖,Maven中的仓库是用来存放maven构建的项目和各种依赖的。 maven仓库分类:

  • 本地仓库: 位于自己计算机中的仓库, 用来存储从远程仓库或中央仓库下载的插件和 jar包,
  • 远程仓库: 1)私服:局域网级(快),一般是公司内部的,阿里提供了一个免费的maven远程仓库。私服的作用:保存具有版权的资源,包含购买或自主研发的jar(中央仓库存储的都是开源的);一定范围内共享资源,仅对内部开放,不对外共享。 2)中央仓库: 在 maven 软件中内置一个远程仓库地址,由maven团队管理 repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven 团队自己维护,里面存储了非常全的 jar包,它包含了世界上大部分流行的开源项目构件

坐标

定义:Maven中的坐标用于描述仓库资源的位置 组成:

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis);
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS);
  • version:定义当前项目版本号;
  • packaging:定义该项目的打包方式;

作用: 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。

仓库配置

本地仓库配置

在maven安装目录下的settings.xml文件中配置 image.png 修改localRepository元素配置项,默认是用户目录下的.m2文件夹,修改成你的仓库地址 image.png

远程仓库配置

  • maven默认远程仓库的位置:国外仓库,访问很慢。 image.png
  • 镜像仓库配置:settings.xml文件中mirrors元素。 image.png 全局setting和用户setting的区别
  • 全局setting定义了当前计算机中maven的公共配置
  • 用户setting定义了当前用户的配置

Maven项目结构

image.png image.png image.png image.png pom.xml的简单配置 image.png

Maven项目的构建

mvn compile // 编译
mvn clean // 清理
mvn test // 测试
mvn package // 打包
mvn install // 安装到本地仓库

在项目目录,pom.xml同级目录下执行命令:mvn compile 此时看到本地仓库已经有对应的插件,包括编译需要的插件以及项目依赖 image.png 下载依赖走的是我们配置的阿里云镜像地址 image.png 注:要确保java版本符合,否则会报错,这里是java 8

编译成功会在项目目录下生成一个target文件夹如下: image.png image.png image.png 运行 mvn clean 可以删除编译产物 image.png 运行 mvn test 执行测试 image.png image.png 测试未通过: image.png 测试通过: image.png 运行 mvn package 进行打包,此命令会先经过编译测试再打包 image.png 运行 mvn install 将打包的jar包按照坐标存入仓库 image.png

插件创建Maven工程

构建java项目

mvn archetype:generate "-DgroupId=com.companyname.bank" "-DartifactId=consumerBanking" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"
  • -DgroupId: 组织名,公司网址的反写 + 项目名称
  • -DartifactId: 项目名-模块名
  • -DarchetypeArtifactId: 指定 ArchetypeId,maven-archetype-quickstart,创建一个简单的 Java 应用
  • -DinteractiveMode: 是否使用交互模式 image.png
文件夹结构描述
consumerBanking包含 src 文件夹和 pom.xml
src/main/java containsjava 代码文件在包结构下(com/companyName/bank)。
src/main/java test测试代码文件在包结构下(com/companyName/bank)。
src/main/resources包含了 图片 / 属性 文件(在上面的例子中,我们需要手动创建这个结构)。

创建web应用

mvn archetype:generate -DgroupId=com.companyname.automobile -DartifactId=trucks -DarchetypeArtifactId=maven-archetype-webapp  -DinteractiveMode=false

image.png

比java项目多一个文件夹:

文件夹结构描述
src/main/webapp包含 index.jsp 文件和 WEB-INF 文件夹.

pom.xml文件:web应用打包方式 war

<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.companyname.automobile</groupId>
   <artifactId>trucks</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>trucks Maven Webapp</name>
   <url>http://maven.apache.org</url>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>
   </dependencies>
   <build>
      <finalName>trucks</finalName>
   </build>
</project>

IDEA创建Maven工程

步骤: image.png

image.png

image.png

image.png

image.png

image.png

tomcat插件安装

image.png

依赖管理

依赖传递 直接依赖:在当前项目中通过配置建立的依赖关系 间接依赖:被依赖的资源,如果依赖其他资源,当前项目间接依赖其他资源

依赖传递冲突问题 路径优先:当依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高; 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的; 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的;

可选依赖 指的是依赖不透明,你用的依赖其他项目不知道 true

排除依赖 定义:主动断开间接依赖 image.png

依赖范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

作用范围

主程序范围有效(main文件夹范围内) 测试程序范围有效(test文件夹范围内) 是否参与打包(package指令范围内) image.png

依赖范围传递性

image.png 参考: