热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Maven入门、什么是Maven、如何使用Maven、Maven的项目结构、简单的Mavenjava项目、Maven常用命令、Maven项目之间的引用、Maven依赖的传递、可选、排除day01

目录第一节Maven入门1.1什么是Maven1.2如何使用Maven第一步:下载Maven第二步:配置Maven的环境变量第三步:了解什


目录

  • 第一节 Maven入门
    • 1.1 什么是Maven
    • 1.2 如何使用Maven
      • 第一步:下载Maven
      • 第二步:配置Maven的环境变量
      • 第三步:了解什么是Maven仓库
      • 第四步:修改setting.xml配置文件
    • 1.3 Maven的项目结构
    • 1.4 在intellij idea中创建一个简单的javaMaven项目
    • 1.5 Maven的常用命令
      • mvn compile
      • mvn clean
      • mvn test
      • mvn package
      • mvn install
      • mvn 组合命令
    • 1.6 一个项目引用另一个项目
  • 第二节 Maven的核心概念
    • 2.1 坐标(gav)
    • 2.2 坐标的查找
    • 2.3 依赖管理
      • scope 依赖范围
      • 依赖传递
      • 可选依赖
      • 排除依赖


第一节 Maven入门


1.1 什么是Maven


  • Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
  • Maven是跨平台的项目管理工具,主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
  • 相当于iOS cocoapods
  • Maven的好处:
    1. 方便jar的管理
    2. 不需要上传jar包到svn
    3. 以后项目中要使用jar包可以使用Maven来管理(jar包不在项目中,在Maven仓库),只需要引入Maven依赖(jar包坐标),使得多个项目只需要使用一套jar即可(节省磁盘空间),项目完成后使用Maven命令将(web)项目打成war包也会把项目所需的jar包含进去。
    4. 而且jar包的版本问题也容易解决,修改依赖即可

1.2 如何使用Maven


第一步:下载Maven


  • Maven无需安装,下载后解压即可
  • Maven下载地址:https://archive.apache.org/dist/maven/maven-3/.
  • 这里使用的是3.5.0版本,也可以使用最新的3.6.3
    在这里插入图片描述
  • .tar.gz是linux系统和macOS下使用
    在这里插入图片描述
  • 解压到自己想要放的位置
    在这里插入图片描述

第二步:配置Maven的环境变量


  • 配置环境变量的目的是为了在dos中快捷、方便的使用Maven的一些命令
  • 右键此电脑->属性->高级系统设置->高级->环境变量
    在这里插入图片描述
  • 在系统变量中新建MAVEN_HOME
    在这里插入图片描述
  • 系统变量中的选中Path,编辑
    在这里插入图片描述
  • 配置完成后一路确定即可
  • (Win+R)输入cmd,打开终端,在里面输入 mvn -v(或mvn -verison),类似如下画面即Maven环境变量配置成功
    在这里插入图片描述

第三步:了解什么是Maven仓库


  1. Maven本地仓库:一般用户只会为自己配置一个本地仓库
    • Maven本地仓库是用来干啥的?
      其实就是用来存放网上下载到本地的jar包。
    • Maven本地仓库的路径默认情况下是在用户目录下 C:\User\xxx\.m2\repository 可修改
  2. Maven远程仓库【私服】
    私服:是一种特殊的远程仓库,它是架设在局域网内的仓库,nexus就是用来创建maven的私服的,也就是提高依赖的下载速度,用阿里云的私服就好(一般公司有自己的私服)
  3. Maven中央仓库
    Maven默认的远程仓库,不包含版权资源,存放了几乎所有的开源jar(但是一般中央仓库的地址下载都比较慢,使用国内阿里云的中央仓库即可)
    在这里插入图片描述

第四步:修改setting.xml配置文件


  • 配置本地的Maven仓库路径,在Maven解压文件目录下的conf/settings.xml中修改
    在这里插入图片描述
  • 查看setting.xml配置文件,看到Default:(默认)是在用户目录下的.m2\repository中
    在这里插入图片描述
  • 复制下面一行,添加本地存放路径(这样配置后,默认配置将不再生效,jar包将存放在设置的路径下,找本地jar的时候,也先在这里面找)

<localRepository>D:\Maven_localRepositorylocalRepository>

  • 继续往下看&#xff0c;maven默认会从上面的服务器(中央仓库) 下载 jar包到本地&#xff0c;由于是国外的服务器&#xff0c;下载jar的速度相对来说会很慢&#xff0c;不使用它&#xff0c;使用国内比较好的阿里云服务器下载jar&#xff0c;速度会快不少
    在这里插入图片描述

<mirror><id>aliyunid><mirrorOf>aliyunmirrorOf><name>aliyun Mavenname><url>http://maven.aliyun.com/nexus/content/groups/public/url>mirror>

  • 打开终端&#xff0c;输入 mvn help:system 回车执行&#xff08;出现以下页面就表示下载完成&#xff09;
  • &#xff08;mvn help:system执行Maven的帮助系统下载一些基本的jar和插件&#xff09;
    在这里插入图片描述
    在这里插入图片描述

1.3 Maven的项目结构


  • 普通maven java项目的结构

ProjectName|-src| |-main| | |-java —— 核心代码部分.java| | |-resources —— 配置文件部分&#xff08;spring、hibernate、mybatis、struts2等&#xff09;| |-test| |-java —— 存放所有测试.java文件&#xff0c;如JUnit测试类| |-resources —— 测试资源配置文件|-target —— 目标文件输出位置例如.class、.jar、.war文件|-pom.xml —— maven项目核心配置文件

  • maven javaWeb项目的结构&#xff08;多了一个webapp存储页面资源&#xff09;

ProjectName|-src| |-main| | |-java —— 核心代码部分.java| | |-resources —— 配置文件部分&#xff08;spring、hibernate、mybatis、struts2等&#xff09;| | |-webapp —— 页面资源、js、css、图片等| |-test| |-java —— 存放所有测试.java文件&#xff0c;如JUnit测试类| |-resources —— 测试资源配置文件|-target —— 目标文件输出位置例如.class、.jar、.war文件|-pom.xml —— maven项目核心配置文件

  • maven打包时会自动除去test包&#xff08;测试&#xff09;下的文件和资源&#xff0c;减轻项目大小。

1.4 在intellij idea中创建一个简单的javaMaven项目

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


  • finish后&#xff0c;如果是第一次创建要等待一段时间&#xff0c;下载相关jar包
  • 如果有报错&#xff0c;可以在本地仓库中删除报错的对应的插件&#xff0c;再刷新一下
    在这里插入图片描述
  • 其它设置
    在这里插入图片描述
  • 再为创建新项目时设置配置&#xff0c;否则每次创建项目都要重新配置很麻烦
    在这里插入图片描述
  • 设置先加载本地插件&#xff08;每次创建项目都去中央仓库下载插件会很慢&#xff0c;设置先加载本地仓库&#xff09;
  • &#xff08;-DarchetypeCatalog&#61;internal&#xff09;
    在这里插入图片描述
  • 创建好的项目缺少一个resources目录&#xff0c;有需要可自行补上
    在这里插入图片描述
    在这里插入图片描述

1.5 Maven的常用命令


  • 写一个简单的例子用于命令的使用
    在这里插入图片描述
  • 直接写&#64;Test会报错&#xff0c;Alt&#43;Enter导入&#xff0c;pom.xml中的依赖会自动加上&#xff08;在main下写的test不要修改scope为test&#xff09;
    在这里插入图片描述
  • 可以选择右侧的Maven&#xff0c;执行相关操作&#xff08;点击即可直接执行&#xff09;
    在这里插入图片描述
  • 除了上面的简便操作外&#xff0c;下面在终端中也可以使用这些命令&#xff08;要进入项目目录中使用命令 &#xff09;

mvn compile


  • 完成编译操作
  • 执行完毕后&#xff0c;会生成target目录&#xff0c;该目录中存放了编译后的字节码文件。
    在这里插入图片描述
  • 双击compile同效果
    在这里插入图片描述

在这里插入图片描述


mvn clean


  • 执行完毕后&#xff0c;会将target目录删除。
    在这里插入图片描述
  • 双击clean同效果
    在这里插入图片描述
  • clean后无target目录
    在这里插入图片描述

mvn test


  • 完成单元测试操作
  • 执行完毕后&#xff0c;会在target目录中生成&#xff1a;surefire-reports&#xff08;测试报告&#xff09;、test-classes&#xff08;测试的字节码文件&#xff09;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

mvn package


  • 完成打包操作
  • 执行完毕后&#xff0c;会在target目录中生成一个文件&#xff0c;该文件可能是jar、war
  • 普通项目.jar&#xff0c;web项目.war
    在这里插入图片描述
    在这里插入图片描述
  • 打开jar会发现&#xff0c;只会保存上面main下的文件&#xff0c;test下的将不会进入打包的文件中&#xff08;由于我这里是直接写在了main的java下&#xff0c;也就直接看到了&#xff0c;可自行测试&#xff09;
    在这里插入图片描述
  • 同样双击package即可
    在这里插入图片描述

mvn install


  • 执行 mvn install命令&#xff0c;完成将打好的jar包安装到本地仓库的操作
  • 执行完毕后&#xff0c;会在本地仓库中出现安装后的jar包&#xff0c;方便其他工程引用
    在这里插入图片描述
  • 双击install&#xff0c;同样效果
    在这里插入图片描述
  • 可在本地仓库中找到&#xff0c;方便其它项目引用
    在这里插入图片描述

mvn 组合命令


  • mvn clean compile&#xff08;先清除再编译&#xff09;
  • mvn clean test&#xff08;先清除再测试&#xff09;
  • mvn clean package&#xff08;先清除再打包&#xff09;
  • mvn clean install&#xff08;先清除再安装&#xff09;
  • 终端中直接输入即可&#xff0c;intellij idea中也提供了
    在这里插入图片描述
    在这里插入图片描述

1.6 一个项目引用另一个项目


  1. 使用骨架&#xff08;模板&#xff09;创建一个普通的Mavenjava项目
    在这里插入图片描述

  • 使用模板创建的普通javaMaven项目少2个resources目录
    在这里插入图片描述
  • 写一个简单的test&#xff0c;运行一下&#xff0c;然后将它install安装到本地
    在这里插入图片描述
    在这里插入图片描述
  • 在项目中新建一个Module&#xff0c;也使用骨架创建一个Maven_java2
    在这里插入图片描述
  • 在Maven_java2中添加上一个项目的依赖&#xff08;上一个项目要记得install安装到本地&#xff0c;否则可能找不到依赖&#xff09;
    在这里插入图片描述
  • 使用
    在这里插入图片描述

第二节 Maven的核心概念


2.1 坐标&#xff08;gav&#xff09;


  • 在平面几何中坐标&#xff08;x,y&#xff09;可以标识平面中唯一的一点。
    在maven中坐标就是为了定位一个唯一确定的jar包。
  • Maven世界拥有大量构建&#xff0c;我们需要找一个用来唯一标识一个构建的统一规范&#xff0c;拥有了统一规范&#xff0c;就可以把查找工作交给机器
  • Maven坐标主要组成(GAV)确定一个jar在互联网位置
    • groupId&#xff1a;定义当前Maven组织名称
    • artifactId&#xff1a;定义实际项目名称
    • version&#xff1a;定义当前项目的当前版本
      在这里插入图片描述

2.2 坐标的查找


  • 访问&#xff1a;http://www.mvnrepository.com.
  • 或直接百度输入maven第一个就是
    在这里插入图片描述
  • 例如要使用spring&#xff0c;输入sping&#xff0c;回车&#xff0c;选择所需要的jar和版本&#xff0c;就能看到所需要的jar的坐标了&#xff0c;复制进项目的pom.xml中的依赖中即可
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3 依赖管理


scope 依赖范围

在这里插入图片描述


  • 其中依赖范围scope用来控制依赖和编译&#xff0c;测试&#xff0c;运行的classpath的关系。
  • 主要的是三种依赖关系如下&#xff1a;
    • compile&#xff1a; 默认编译依赖范围。对于编译&#xff0c;测试&#xff0c;运行三种classpath都有效
    • test&#xff1a;测试依赖范围。只对于测试classpath有效。
    • provided&#xff1a;已提供依赖范围。对于编译&#xff0c;测试的classpath都有效&#xff0c;但对于运行无效&#xff0c;因为由容器已经提供。例如&#xff1a;servlet-api
    • runtime&#xff1a;运行时提供。例如&#xff1a;jdbc驱动

依赖传递


  • 直接依赖和间接依赖
    • Maven_java2依赖 Maven_java&#xff0c;Maven_java3依赖Maven_java2
    • Maven_java2直接依赖Maven_java&#xff0c;Maven_java3间接依赖Maven_java
      在这里插入图片描述
  • 写成test就只能在当前的test包下使用
    在这里插入图片描述
  • 2依赖1
    在这里插入图片描述
  • 3依赖2
    在这里插入图片描述
  • 范围是compile的时候&#xff0c;依赖可以传递
    在这里插入图片描述
  • 范围是test的时候&#xff0c;依赖不会得以传递&#xff08;如果自己也不配置&#xff0c;2和3使用junit都会报错&#xff09;
    在这里插入图片描述
  • 如果2中设置了junit4.12且是compile&#xff0c;那么3会就近依赖使用2中的junit&#xff08;无关乎版本&#xff0c;就是就近&#xff09;

可选依赖


  • true/false 是否可选&#xff0c;也可以理解为是否向下传递。
  • 在依赖中添加optional选项决定此依赖是否向下传递&#xff0c;如果是true则不传递&#xff0c;如果是false就传递&#xff0c;默认为false
  • 在2中设置不向下传递&#xff0c;由于3中没有配置junit&#xff0c;而2又不向它传递会直接报错
    在这里插入图片描述

排除依赖


  • exclusions可用于排除依赖&#xff0c;注意exclusions是写在dependency中
  • 在3中设置排除1传递的依赖&#xff0c;因为2依赖1&#xff0c;3依赖2&#xff0c;所以默认的3中会有1的依赖&#xff0c;可以使用exclusions将其排除
    在这里插入图片描述

推荐阅读
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
author-avatar
kyijhx
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有