1. Maven引入
1.1 传统方式中项目jar包资源的问题
-
项目中的jar包资源(如JDBC驱动包)需要我们自己从网上下载,然后手动导入到项目中使用
–> 一旦jar包资源过多,容易造成遗漏,且不好管理
-
如果有两个项目,A和 B,如果 A需要用到 B中的某些资源,需要我们手动将 B中的资源导出为 jar包或者直接复制源码,然后手动导入到 A项目中
问题:都需要开发人员手动处理
解决:Maven项目资源管理工具
- 管理(查找、下载、引入等)项目中的第三方jar包资源
- 将自己项目中的某些资源导出为jar包对外提供服务
注意
:Maven只能管理通过Maven工具创建的项目(Maven项目)
1.2 基本原理图
1.3 专业术语
- Maven:项目管理工具
- Maven插件:给IDE工具集成用的
- 本地仓库:Maven在本机电脑的硬盘中存储 jar文件的地方
- 中央仓库:Maven在本地仓库中没有找到对应的资源后会自动的去云仓库中下载,云仓库就是所有的程序员开发好的jar包资源的在线存储仓库(如阿里云)
- 资源坐标:可以唯一标识一个 jar文件(可以理解为 ID)
- 资源的路径
- 资源的版本号
- 资源的名称
2. Maven的项目类型
- Java文件:手动创建单个的Java文件,并在该文件中声明对应的功能代码,然后使用 java和 javac命令进行编译和运行
- Java项目:将处理同一个功能的 Java文件放在一起
- JavaSE项目:统一Java项目的目录结构体系,让不同的程序员之间沟通方便,由IDE工具帮我们创建(不同 IDE工具创建的项目体系结构不同)
- JavaEE项目:是一个Web项目,该项目的运行不光需要JDK的支持,还需要服务器容器的支持,由IDE工具帮我们创建(不同 IDE工具创建的项目体系结构不同)
虽然不同的 IDE工具在开发阶段创建的项目体系结构不同,但是在上线阶段,最终运行的代码的项目结构体系是相同的。
- Maven项目:通过 Maven工具创建的项目
- POM类型:多模块间互相引用
- WAR类型:相当于JavaEE项目
- JAR类型:相当于JavaSE项目
虽然 Maven项目源码的结构体系和JavaSE、JavaEE都不同,但是它们编译后的项目结构体系是一样的,而项目运行的是编译后的内容
3. Maven安装和配置
-
进入Maven官网
-
选择对应的版本进行下载,建议选择 apache-maven-***-bin 格式的
-
下载后放到合适的位置(虚拟机内的Linux可以通过xftp等工具进行上传)并解压
Linux解压命令:
tar -zxvf apache-maven-3.9.6-bin.tar.gz
-
进入解压后的文件夹,查看对应的目录结构
-
在 conf文件夹下编辑 setting.xml文件(Linux可以使用vim命令),第54行左右,声明本地仓库地址
-
然后在第159行左右,配置maven的云仓库地址(此处使用阿里云)
<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>https://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
-
可以在第218行,再配置下maven的 jdk版本(maven会自动从网上下载对应的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>
-
最后根据个人需要,看是否进行环境变量的配置
-
Windows:在环境变量中,增加 MAVEN_HOME(maven安装目录),然后在PATH下增加:%MAVEN_HOME%/bin
-
Linux:在 /etc/profile 文件中增加:
export MAVEN_HOME=maven安装目录
export PATH= P A T H : PATH: PATH:MAVEN_HOME/bin然后重新加载配置文件:source /etc/profile
-
在 IDEA中集成 Maven
4. Maven Project的创建和使用
4.1 Maven的jar类型项目
-
使用 IDEA(2023.1版本为例),选择New Project,创建一个Maven项目
-
点击 Create之后,IDEA会帮我们自动下载并导入依赖,如果没有自动导入,右下角可能有提示,选择“Auto-import”字样的即可
jar 类型项目的结构和特点:
- 相当于之前的JavaSE项目(因此jar项目编译后的项目结构体系,和原有JavaSE项目编译后的结构体系相同)
- 默认在 test目录下的测试代码不会编译到项目中
4.2 Maven的war类型项目
-
使用 IDEA创建项目时,在 maven原型处,可以选择 webapp字样的选项
-
点击 Create之后,IDEA会帮我们自动下载并导入依赖,如果没有自动导入,右下角可能有提示,选择“Auto-import”字样的即可
war 类型项目的结构和特点:
- 相当于之前的JavaEE项目,完成web项目的开发
- 项目编译后的结构体系和原有JavaEE项目编译后的结构体系相同(也就是maven的war项目编译后,可以直接在tomcat中使用)
5. Maven项目中 pom配置文件的使用
5.1 pom文件的作用
每个 maven项目默认有一个 pom文件。
pom 文件用来告诉 maven,当前项目中需要使用哪些资源。
我们只需在pom配置文件中,声明需要使用的资源的坐标即可,文件会被 maven自动加载识别。
每次修改 pom后,maven都会根据修改的内容,自动重新加载最新的资源
5.2 pom文件的配置内容
war类型项目的配置文件,jar类型项目的配置文件与之基本相同
<!-- xmlns、xsi: xml的文档约束 -->
<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>
<!-- 当前项目的资源坐标:给maven查看(主要提供给其他的maven项目来使用) -->
<groupId>com.lwclick</groupId>
<artifactId>warDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 此标签用来标识当前项目的"项目类型", 默认为jar -->
<packaging>war</packaging>
<!-- 声明 properties标签,对资源的版本号进行统一的管理 -->
<properties>
<!-- 自定义标签,声明版本号资源(标签名尽量阅读性比较高) -->
<junit.version>3.8.1</junit.version>
</properties>
<!-- 声明要引入的第三方资源坐标 -->
<!-- maven会根据坐标先在本地仓库中找,如果本地找不到,则自动从云仓中下载 -->
<!-- 可以在 https://mvnrepository.com/网址 搜索需要的资源坐标 -->
<dependencies>
<!-- 声明具体的第三方资源坐标; 一个资源配置一个dependency -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 使用自定义的标签 -->
<version>${junit.version}</version>
<!-- scope标签:用来告诉maven引入的第三方资源的 使用说明
compile:默认值
表示当前依赖参与项目的编译、测试、运行阶段,属于强依赖
打包时,也会打到包内
test:表示该资源专门给当前项目的测试代码使用,不参与打包
provided:用于开发、测试阶段,但是不参与打包,运行时由运行的环境来提供对应的资源 -->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 打包后的 war包名称 -->
<finalName>warDemo</finalName>
<!-- 引入第三方的插件资源 -->
<plugins>
<!-- 配置Tomcat插件,只为当前项目服务 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 配置 tomcat启动的端口号 -->
<port>8080</port>
<!-- 配置项目的访问名称 -->
<path>/warDemo</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
注意:
-
在以前的 JavaEE项目中,IDE会自动的的将 JDK及 tomcat的资源依赖到项目中
-
而 maven中的 war类型项目,默认是没有引入任何第三方资源的
因此,想完成最基本的 web开发,需要在 pom中配置最基础的资源坐标:
servlet
(scope为provided)、jsp
(scope为provided)、jstl