Maven学习笔记 2021-06-04

Maven学习笔记

1.基本介绍

1.1 为什么会出现maven

1)java项目会有大量的jar包需要依赖,各个jar包又有自己的依赖。
2)项目需要拆分成多个工程模块,模块之间的依赖关系也需要管理。
所以需要一个管理工具,统一管理。maven就出现了。

1.2 maven简介

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。

构建:
    1)清理:删除以前的编译结果,为重新编译做好准备。
    2)编译:将 Java 源程序编译为字节码文件。
    3)测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
    4)报告:在每一次测试后以标准的格式记录和展示测试结果。
    5)打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。
    6)安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
    7)部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行

1.3 maven核心概念

1)POM
2)约定的目录结构
3)坐标
4)依赖管理
5)仓库管理
6)生命周期
7)插件和目标
8)继承
9)聚合

1.4 如何使用

1)下载maven的bin,在apache官方网站可以下载。
2)配置环境变量。

    Maven 的核心程序中仅仅定义了抽象的生命周期,而具体的操作则是由 Maven 的插件来完成的。可是
    Maven 的插件并不包含在 Maven 的核心程序中,在首次使用时需要联网下载。
    下载得到的插件会被保存到本地仓库中。本地仓库默认的位置是:~\.m2\repository。

maven部署

1)部署maven核心程序

1)检查JAVA_HOME环境变量
		C:\Windows\System32>echo %JAVA_HOME%
		D:\DevInstall\jdk1.7.0_07
2)解压Maven的核心程序
		将apache-maven-3.2.2-bin.zip解压到一个非中文无空格的目录下。
3)配置环境变量
		M2_HOME D:\DevInstall\apache-maven-3.2.2
		path	D:\DevInstall\apache-maven-3.2.2\bin
4)查看Maven版本信息验证安装是否正确
		C:\Windows\System32>mvn -v
            Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T21:51:42+08:00)
            Maven home: D:\DevInstall\apache-maven-3.2.2\bin\..
            Java version: 1.7.0_07, vendor: Oracle Corporation
            Java home: D:\DevInstall\jdk1.7.0_07\jre
            Default locale: zh_CN, platform encoding: GBK
            OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

2)修改默认仓库

1)默认本地仓库位置:~\.m2\repository
	~表示当前用户的家目录,例如:C:\Users\[你当前登录系统的用户名]
2)指定本地仓库位置的配置信息文件:apache-maven-3.2.2\conf\settings.xml
3)在根标签settings下添加如下内容:<localRepository>[本地仓库路径,也就是RepMaven.zip的解压目录]</localRepository>

2. maven目录结构

2.1 maven项目目录结构

Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml

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

2.2 项目目录对应关系

类路径
	src目录下的源代码叫类路径
		也会把classes下的编译后的目录叫类路径
webContent
	对应编译后的项目名称文件夹,这个文件夹最后放在服务器上,如tomcat下的webapps

在这里插入图片描述

2.3 WEB-INF、BOOT-INF、META-INF

WEB-INF是Java的WEB应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。
    如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
    /WEB-INF/web.xml : Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
    /WEB-INF/classes/ : 包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。
    /WEB-INF/lib/ : 存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。
    页面放在WEB-INF目录下面,这样可以限制访问,提高安全性.如JSP,html


META-INF 相当于一个信息包,目录中的文件和目录获得 Java 2 平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务manifest.mf文件,在打包时自动生成。
	简单的说法:就是存储了项目的元信息,其中文件manifest.mf仅此一份,描述了程序的基本信息、Main-Class的入口、jar依赖路径Class-Path。



BOOT-INF
	spring-boot maven打包,一般pom.xml文件里会加
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    这样打的jar里会多一个目录BOOT-INF。
    
    
    解决办法,如果A子模块包依赖了B子模块包,在B子模块的pom文件,加入
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>

https://blog.csdn.net/cdnight/article/details/88728359
https://cloud.tencent.com/developer/article/1445768


在这里插入图片描述

3. pom

Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。
Maven 工程的核心配置。

4. 坐标

GAV
[1]groupid:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本

<groupId>com.xxx.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>


SNAPSHOT 快照版本
RELEASE 稳定版本

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
        <version>2.2.3.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>com.xx.mec</groupId>
        <artifactId>mec-parent</artifactId>
        <version>0.6-SNAPSHOT</version>
    </dependency>
    


5. 依赖

当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖。

用 dependency 标签指定被依赖 jar 包的坐标就可以了
<dependency>
    <groupId>com.atguigu.maven</groupId> 
    <artifactId>Hello</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <scope>compile</scope>
</dependency>


依赖具有传递性
A依赖B,B依赖C,A正常情况下是可以使用C的 主要看scope依赖的范围是否未compile

在这里插入图片描述

3.1 依赖的范围

scope 依赖的范围
<scope>test</scope>
<scope>compile</scope>
<scope>provided</scope>
test 测试范围
compile 编译范围
provided 已提供范围

	
    		compile 	test 	provided
    主程序 	√ 		    × 		 √
    测试程序 	√ 		   √ 		√
    参与部署 	√ 		   × 		×

3.2 依赖的排除

依赖的排除
<dependency>
 <groupId>com.atguigu.maven</groupId>
 <artifactId>HelloFriend</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <type>jar</type>
 <scope>compile</scope>
 <exclusions> 
     <exclusion> 
         <groupId>commons-logging</groupId> 
         <artifactId>commons-logging</artifactId> 
     </exclusion> 
 </exclusions> 
</dependency>

3.3 统一管理版本

统一管理所依赖 jar 包的版本
<properties>
 	<xx.spring.version>4.1.1.RELEASE</xx.spring.version>
</properties>

<dependencies>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>${atguigu.spring.version}</version>
     </dependency>
</dependencies>

properties可用于标识任意属性,不一定非要是版本version.
<properties>
 	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

6. 仓库

本地仓库
远程仓库
	局域网-私服 Nexus
	中央仓库
	中央仓库镜像

仓库里的内容:
	maven自身所需的插件
	第三方工具或框架的jar包
	自己开发的maven工程
	
	
		ps 第一方jdk 第二方开发者自己 第三方其他人

7. 生命周期

生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命令了。
运行任何一个阶段的时候,它前面的所有阶段都会被运行。

    Maven 的核心仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的。
    每个插件都能实现多个功能,每个功能就是一个插件目标。
    Maven 的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
    例如:compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标。

clean
validate
compile
test
package
install
deploy


 有三套相互独立的生命周期,分别是:
    1)Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    2)Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
    3)Site Lifecycle 生成项目报告,站点,发布站点

Clean 生命周期
    1)pre-clean 执行一些需要在 clean 之前完成的工作
    2)clean 移除所有上一次构建生成的文件
    3)post-clean 执行一些需要在 clean 之后立刻完成的工作

Site 生命周期
    1)pre-site 执行一些需要在生成站点文档之前完成的工作
    2)site 生成项目的站点文档
    3)post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    4)site-deploy 将生成的站点文档部署到特定的服务器上
    这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大
    的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。   
    
Default 生命周期
	Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,
只解释一些比较重要和常用的阶段:
    validate
    generate-sources
    process-sources
    generate-resources
    process-resources 复制并处理资源文件,至目标目录,准备打包。
    compile 编译项目的源代码。
    process-classes
    generate-test-sources
    process-test-sources
    generate-test-resources
    process-test-resources 复制并处理资源文件,至目标测试目录。
    test-compile 编译测试源代码。
    process-test-classes
    test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
    prepare-package
    package 接受编译好的代码,打包成可发布的格式,如 JAR。
    pre-integration-test
    integration-test
    post-integration-test
    verify
    install 将包安装至本地仓库,以让其它项目依赖。
    deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。
    

8. 继承

需要一个统一的父工程,统一管理版本信息等。

8.1 创建父工程

创建父工程和创建一般的 Java 工程操作一致,唯一需要注意的是:打包方式处要设置为 pom。
父工程:
<dependencyManagement> 
    <dependencies> 
        <dependency> 
            <groupId>junit</groupId> 
            <artifactId>junit</artifactId> 
            <version>4.9</version> 
            <scope>test</scope>
		</dependency>
	</dependencies>
</dependencyManagement>


8.2 在子工程中引用父工程

子项目
	此时如果子工程的 groupId 和 version 如果和父工程重复则可以删除。
<parent>
    <!-- 父工程坐标 -->
    <groupId>com.xxx.maven</groupId>
    <artifactId>Parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>>../Parent/pom.xml</relativePath>
    <!-- 指定从当前子工程的pom.xml文件出发,查找父工程的pom.xml的路径 -->
</parent>

	在子项目中重新指定需要的依赖,可不写范围和版本号。
<dependencies> 
    <dependency> 
        <groupId>junit</groupId> 
        <artifactId>junit</artifactId>
	</dependency>
</dependencies>

9. 聚合

将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行 clean 操作。
而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。


<modules> 
    <module>../Hello</module> 
    <module>../Hello1</module> 
    <module>../Hello2</module>
</modules>

maven核心概念

POM
约定的目录结构
坐标gav
依赖
仓库
生命周期
插件和目标
继承
聚合

maven常用命令

命令解释
mvn compile
mvn test-compile
mvn test
mvn site
mvn package
mvn install
mvn clean
mvn eclipse:eclipse
mvn idea:idea
mvn -Dtest package
mvn jar:jar
mvn test -skipping compile -skipping test-compile
mvn eclipse:clean
mvn dependency:list
mvn deploy
mvn clean install-U
mvn source:jar mvn source:jar-no-fork

https://www.cnblogs.com/wkrbky/p/6352188.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值