maven入门教程
问题及引入 | 解决 |
---|---|
开发过程中单体结构的项目项目中的资源没有合理的复用 | 引入maven项目资源管理工具 |
具体细节问题:①大型项目一定会使用框架,那就必然会在web-inf目录下引入大量的jar包,造成jar包和项目耦合度非常的高,后期替换和团队的统一管理就会特别的麻烦 | 将jar包的导入变为通过配置文件来导入,只需要在配置文件中声明jar包的文件名和版本号,如果需要修改删除或者新增时,只需要修改配置文件中jar报的坐标信息即可 |
具体细节问题:②基于mcv分层思想进行开发,将项目代码全部声明在一起,造成层与层之间的代码在物理视图上的耦合度特别高,一旦其他的web项目要使用开发好的某个业务逻辑,这个操作过程会特别特别繁琐 | 将以前的一个项目拆分为多个项目使用,而每个项目都可以独立进行打包,最终合并为一个整体的项目 |
什么是maven:maven大体上来说是一个项目管理工具,可以做到代码,依赖以及常用类等各种资源的分享和复用,提高了开发的效率
- maven的使用
maven下载:maven下载地址
本次演示以3.3.3版本进行演示1.从官网下载maven插件的压缩包
2.解压压缩包,并将解压后的内容复制到一个新的文件夹中
3.配置Maven的本地仓库
本地仓库:本地主机硬盘中存储了各种jar包资源的一个文件夹
maven会根据项目中配置的资源坐标从本地仓库中找到对应的jar包
导入到项目中。
注意:记得在本地主机中将配置的本地仓库的文件夹提前创建好!
编辑修改
4.配置maven的中央仓库。
中央仓库:maven下载jar资源的网络仓库,该仓库中存储了N多的jar包资源
只有你想不到的,没有我没有的!当本地仓库没有对应的jar资源时 maven会自动从中央仓库中下载到本地仓库,然后导入项目。
注意:使用maven必须有网。一旦出现jar使用异常,但是经检验项目代码 没有问题,则清空本地仓库,重新从中央仓库中下载。
有兴趣的小伙伴可以自己搭建私服作为maven的中央仓,这样避免了网络的延时,还可以合作伙伴之间进行共享,一般公司中都会采用搭建私服的模式创建中央仓进行资源共享
5.配置maven的jdk版本:因为要使用maven进行打jar,需要指定maven的jdk使用版本。
2.maven和idea的集成(本文只介绍idea集成maven,eclipse集成maven与之大同小异)
1.点击idea的菜单栏中的file点击setting进入配置页面
2.在idea的maven的配置页面中配置本地maven的基本信息
3.在maven的集成页面中配置maven的路径信息以及settings.xml文件的路径和信息,点击完成,即可
maven配置成功!
3.创建第一个maven项目
maven的jar项目创建:我们在使用了Maven进行项目资源管理后,maven可以帮我们通过 项目资源的配置文件来更新项目的jar包资源,同时也可以将当前项目通过坐标引入到其他项目使用,但是前提必须是项目结构能够被maven能识别,而idea的javaPoject的项目结构maven是不识别的,必须通过maven来创建功能和idea中的javaProject相同的项目,而在maven中我们亲切的称之为jar类型项目。
本质上来说就是用maven创建了一个java项目
流程:
1.在IDea工具中点击file–>new–>moudle–>maven–>点击create from archetype 对勾–> 点击quickstart–>点击next
2.配置项目的坐标
3.配置项目本地的存储路径及项目名
4.jar类型项目的结构
这时我们需要在main目录下创建resources配置文件包,用来存放配置文件
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--标识项目的唯一坐标 -->
<groupId>com.practice.consumer</groupId>
<artifactId>rmi-consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<!--声明其他资源的坐标,maven会将对应的资源导入到我们的项目中-->
<name>rmi-consumer</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<!--配置项目中的字符编码,jdk编译版本,还可已在properties标签中加入jar包的版本信息 -->
<properties中的>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<!--依赖管理-->
<dependencies>
<dependency>
<groupId>com.practice.provider</groupId>
<artifactId>rmi-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<!--插件管理-->
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
4.创建war项目
在上面我们创建了一个jar项目(其实就是一个普通的java项目),那接下来就创建一个war项目
那什么是war项目呢(maven识别的一个web项目)
1.点击file–>new–>moudle–>maven–>create from archetype–>webaapp–>next
2.配置war项目的坐标(参考jar项目的步骤2)
3.配置项目名和本地存储路径(参考jar项目步骤3)
4.创建war项目的结构
配置tomcat插件参考maven集成tomcat
5.maven项目之间的关系
1.依赖关系:如果maven项目A需要使用Maven项目B中的功能,需要将maven 项目B的坐标配置在项目A的pom.xml文件中即可,那么A和B我们称之为依赖关系
注意:maven会自动的根据依赖关系将相关资源导入到项目中,比如A依赖B,但是B依赖C,只在A中配置B的坐标,而 Maven也会根据链式的依赖关系将所有的资源导入到A中
2.继承关系:maven中的子项目自动拥有父项目在pom.xml文件中管理的资源,子项目无需在重新配制
注意: java中的继承,是类于类之间的继承,子类从父类中继承的是功能(属性和方法)
maven中的继承,是项目于项目之间的继承,子项目继承的是父项目的资源
像Java中使用extends关键字来描述类与类之间的关系,maven中也要使用
某种方式来声明项目之间的继承关系
修改某个maven项目的类型为pom类型,该项目就为父项目
注意:pom类型的项目只做资源管理,不做功能开发,说白了就是pom项目中配置了一堆的资源坐标
3.聚合关系:将本来在一个项目中声明的代码,分别拆分为多个项目来开发, 物理视图上是多个项目,逻辑上在开发一个系统,这样的项目关系称为聚合关系