第七下载:绿色软件放心下载

首页 > 软件教程 > 使用教程 > 详情

Maven是什么?看完这篇就懂了

作者:wangjing 来源:第七下载 更新:2022-04-08 10:27:27 阅读:

用手机看

  • Android版

懂了 4.1.4

懂了 4.1.4

大小:49.70 语言:简体中文

类型:学习教育 等级:

立即下载 查看详情

Maven是什么?它本质上是一个项目管理工具,是将项目开发和管理过程抽象成一个项目对象模型(POM:project object model)。
 
今天我们就来讲讲Maven的基本知识。

01

Maven是什么?

传统项目管理状态分析
  • jar包不统一,jar包不兼容导致的问题

  • 工程升级维护过程操作繁琐

02

Maven的作用

Maven本质上是一个项目管理工具,是将项目开发和管理过程抽象成一个项目对象模型(POM:project object model)。
Maven可以为我们进行项目构建(提供标准化,跨平台的zi’dong话项目构建方式),依赖管理(方便快捷的管理项目的依赖资源jar包,避免资源及版本的冲突),同意开发结构:提供标准统一的项目结构。

03

Maven的按装

https://maven.apache.org/download.cgi该网站下载安装。
 
Maven属于是绿色软件,解压即安装。

04

Maven文件结构

  • bin:maven的核心运行文件

  • boot:mavem的类加载器

  • conf:maven的核心配置

  • lib:maven的依赖jar包

05

Maven环境变量配置

  • 依赖于java,需要配置JAVA_HOME

  • 设置Maven自身的MAVEN_HOME

  • 运行cmd输入mvn检测是否安装成功

06

Maven的基础概念

仓库

仓库:用于存储各种资源,包含各种jar包


仓库分类:
  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源

  • 远程仓库:非自己电脑上的仓库,为本地仓库提供资源

  • 中央仓库:Maven团队维护,存储所有资源的仓库

  • 私服:部门/公司范围内存储的仓库,从中央仓库获取资源

 
 
  • 私服的作用:

 
  1. 保存具有版权的资源,包含自主研发或购买的jar(中央仓库的的jar包都是开源的,不能存储具有版权的资源)

  2. 一定范围内共享资源,仅对内部开放,不对外共享。

坐标

坐标是用来在仓库中资源的位置的。
 
https://repo1.maven.org/maven2/该链接中是maven中央仓库资源。
 
maven坐标的组成:
 
  • groupId:定义当前Maven项目隶属于组织的名称(通常是域名反写)

  • artifactld:定义当前Maven项目的名称(通常是模块名称,例如:CRM,SMS)

  • version:定义当前项目的版本号

  • packaging:定义当前项目的打包方式

本地仓库配置

  • 进入Maven的conf文件夹中的setting文件

 
默认的仓库配置
 
​​​​${user.home}/.m2/repository
自定义自己的仓库位置
​​​​​<settings><localRepository>D:\maven\repository</localRepository></settings>
 
中央仓库的配置位置
 
在lib文件中随便找一个jar包用winrar打开,然后返回上一级目录搜索pom*.*,找到pom-4.0.0.xml文件,定位到。将文件拖出后打开。


远程镜像仓库的配置(当需要访问中央仓库的时候,就会去访问镜像仓库。ps:中央仓库在国外,访问速度慢)
1.<!-- 配置具体仓库的下载镜像 -->
2.
<mirror>
3.<!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->

4. <id>ali-maven</id>

5. <!-- 对哪种仓库进行镜像,简单说就是代替哪个仓库 -->

6. <mirrorOf>central</mirrorOf>

7. <!-- 镜像的名称 -->

8. <name>aliyun maven</name>

9.<!-- 镜像的URL -->

10. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
11.</mirror>

Maven项目构建命令

后面的命令在执行的时候都会执行前面的命令,如:在执行install的时候前面的生命周期都会执行。
 
  • mvn compile 编译(在src同级目录下生成一个target文件)

  • mvn clean 清理(删除target文件)

  • mvn test 测试(会在编译同时将test的部分也编译,并执行test内测试方法的内容,在surefile-reports中生成报告内容)

  • mvn package 打包(target文件中生成一个jar包)

  • mvn install 安装到自己本地仓库

创建maven项目(idea)

  • 创建一个空的项目

  • file——>setting——>build,execution——>Build Tools ——> Maven

 
选择自己的安装的maven,选择自己的配置文件。
 
在新项目配置中采用同样的配置


创建maven 项目

idea使用maven命令

在idea的右边有一个maven选项,打开后点击声明周期可以运行maven的命令(与命令效果相同)
也可以点击上方的锤子选择Maven,添加命令在执行达到一样的效果(优点:可以使用debug模式运行)

idea使用原型模板创建项目

使用原型创建java项目

使用原型创建web项目

运行web项目

安装tomcat插件,在右侧maven插件run运行
​​​​1.<?xml version="1.0" encoding="UTF-8"?>
2.

3.<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
4.xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
5.<!--指定pom的模型版本-->
 
6. <modelVersion>4.0.0</modelVersion>
7.
8.
<!--组织id--> 
9.<groupId>org.example</groupId>
 
10.<!--项目名称-->
11.
<artifactId>untitled1</artifactId> 
12.<!--版本号,release(完成版),snapshot(开发版)-->
 
13.<version>1.0-SNAPSHOT</version>
 
14.<!--打包方式为web是war包-->
 
15.<packaging>war</packaging>

16.
17.<name>untitled1 Maven Webapp</name>
18.
<!-- FIXME change it to the project's website --> 
19.<url>http://www.example.com</url>
 
20.
21.<properties> 
22.<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23.
<maven.compiler.source>1.7</maven.compiler.source>
24.<maven.compiler.target>1.7</maven.compiler.target> 
25.</properties>
26.

27.<dependencies> 
28..<dependency>
 
29.<groupId>junit</groupId>
 
30.<artifactId>junit</artifactId>
31.
<version>4.11</version> 
32.<scope>test</scope>
33.
</dependency>
34.
</dependencies>
35.
 
36.<!--构建--> 
37.<build>
38.
<!--设置插件--> 
39.<plugins>
 
40.<!--具体的插件位置-->
41.
<plugin>
42.<groupId>org.apache.tomcat.maven</groupId>
43.
<artifactId>tomcat7-maven-plugin</artifactId>
44.
<version>2.2</version> 
45.<!--具体的配置-->

46.<configuration> 
47.<!--端口-->
 
48.<port>80</port>
49.
<!--虚拟路径-->
50.<path>/</path>
51.
</configuration> 
52.</plugin>
53.

54. </plugins>
55.
</build>
56.</project>

使用命令选项运行

07

Maven的依赖管理

依赖配置

  <dependencies>   
 //单个依赖 
 <dependency>   
 <groupId>junit</groupId>    
 <artifactId>junit</artifactId>   
 <version>4.11</version>   
 <scope>test</scope> 
 </dependency>
 </dependencies>

依赖传递

  • 直接依赖:当前项目通过文件依赖配置建立的依赖关系。

  • 间接依赖:被依赖的资源如果依赖于其他资源,那么当前项目间接依赖于其他资源。

依赖传递冲突

  • 路径优先:当依赖中出现相同的资源时,层级越深优先级越低,层级越浅,优先级越高

  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

  • 特殊优先:当同级出现了相同资源的不同版本,后配置的覆盖先配置的

  • 总结:比较时哪个先出现先用哪个

可选依赖

在被依赖的配置文件中对不想被依赖的依赖选项添加一个optional选项,默认时false,将其修改为true即可(控制别人能不能引用自己引用的依赖)
​​​​​​<dependency>
<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.12</version>

<optional>true</optional>

</dependency>

排除依赖

如果不想引用间接依赖的中一些依赖,可以主动排除这个依赖(不去引用别人引用的依赖)
<dependency>   
 <groupId>org.example</groupId>   
 <!--项目名称-->    
 <artifactId>untitled1</artifactId>   
 <version>1.0-SNAPSHOT</version>   
 //排除包含   
 <exclusions>    
 //具体排除的依赖        
 <exclusion>           
 <groupId>junit</groupId>           
 <artifactId>junit</artifactId>       
 </exclusion>   
 </exclusions>
 </dependency>

依赖的范围

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

  • 作用范围

  1. 主程序范围内有效(main文件范围内)

  2. 测试程序范围内有效(test文件范围内)

  3. 是否参与打包(package指令范围内)

    依赖范围的传递性

  4. 带有依赖范围的资源在传递的时候,作用的范围将受到影响

  5. 行中为直接依赖选项,列为间接依赖的选项

    08

    项目的构建生命周期

    项目的构建生命周期
    Maven对项目构建生命周期分为三个阶段,不同阶段有不同的过程事件
    clean:清理工作
    1.pre-clean :执行一些需要在clean之前完成的工作

    2.clean:移除上一次构建生成的文件

    3.post-clean:执行一些在clean之后立即完成的工作

     

    defult:核心工作,例如编译,测试,打包,部署等

    site:产生报告,发布站点

    1.pre-site:执行一些在生成站点文件前要完成的工作

    2.site:生成项目的站点文件

    3.post-site:执行一些需要在生成站点文件后完成的工作,为部署做准备

     

    09

    插件

    插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应插件功能

    默认Maven的各个生命周期上绑定有预定的预设功能

    通过插件可以自定义其他功能
    <!--具体插件:对test区域源代码的打jar-->
    <plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-jar-plugin</artifactId>

    <version>3.2.0</version>
    <!--插件的行为-->

    <executions>

    <!--具体行为--> <execution>
    <goals>
    <!--目标:执行的结果,这里时打jar包,并未所有的插件都有-->

    <goal>jar</goal>
    <!--可以打多个jar包-->

    <goal>test-jar</goal>
    </goals>

    <!--在哪个阶段执行-->

    <phase>generate-test-sources</phase>

    </execution>
    </executions>

    </plugin>

     

 
?
热点推荐
?
赞助
?
网友跟帖吐槽
pl
返回顶部