Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从初识Maven到使用Maven进行依赖管理和项目构建

从初识Maven到使用Maven进行依赖管理和项目构建

作者头像
MindMrWang
发布于 2018-04-16 08:01:07
发布于 2018-04-16 08:01:07
1.5K00
代码可运行
举报
文章被收录于专栏:Java学习之路Java学习之路
运行总次数:0
代码可运行

前些天就安装了Maven,以备自己以后整合项目用,尤其是我们的ssh,ssm项目。想必好多人在开始的时候并不清楚Maven是什么,它能够帮助我们干什么。 所以在学习Maven之前我们一定要知道它是什么,并且知道它能够帮助我们干什么!

Maven是什么:

这里博主就偷个懒,引用了百度百科上面的解释,它的解释可能不一定完全描述这个Maven,但是对于初学者我们知道这个就行了。

Maven能够帮助我们干什么: 它的主要两个功能:

  • 依赖管理(jar包管理)
  • 构建项目

①我们知道java项目(web)在开发的过程中需要大量的jar包,这个导致我们的项目会非常的庞大,通过Maven,我们web项目再也不用导jar包了,我们只需要在Maven的主配置文件中添加相应jar包的标识(标识:公司或者组织名+项目名+版本号)就好了。

②项目的构建,我们可以通过Maven构建Maven项目,它开创了一套目录结构,对各种文件的分类更加的细致。

简单的介绍就到这里,更深入的我们后面慢慢提及。


(一)下载安装

废话少说,接下来我们到官网上下载Maven:http://maven.apache.org/

下载你想要的版本,然后解压到你的本地磁盘(路径不能有中文),最后就是配置环境变量(Maven的工作环境要有jdk,即要使用Maven就要有jdk环境),关于配置环境变量:前些天我碰到个小问题在也在我的一篇博文中简单描述了一下: http://blog.csdn.net/qq_39266910/article/details/78708412 有兴趣的同学可以去看看!


(二)Maven仓库分类及配置

解压Maven过后就要配置Maven本地仓库,在说本地仓库前,我们先了解下Maven的分类:

(图片来自网络)

这个就是Maven仓库的三种类型,一个是我们程序员本地计算机上的本地仓库,默认目录为:C:\Users\john.m2\repository

当然我们可以修改这个路径,也就是配置我们的本地仓库了:

再涂鸦的路径下的setting文件下,找到<localRepository>标签(原来在注释中,需要我们将它复制出来),并填上你想要的本地仓库路径。


(三)在eclipse中创建Maven项目

和我们通常创建项目一样,我们可以在File→new→

填写工作组,项目名,就可以完成创建Maven项目了。

下面我们来看看Maven项目的目录结构:

(四)Maven常用的命令

以下所有的命令都要在项目的根目录下进行。 Maven提供了一套命令,我们可以在dos小黑窗中使用,当对Maven项目使用这些命令的时候我们应该切换到该项目的根目录下。 命令一: mvn clean 这个命令可以清除我们的target文件夹(这个文件夹存放编译后的.class文件)

命令二: mvn compile 和上面的命令相反,这个命令是编译一个项目的,前提是我们当前命令行位置为该项目的根目录下。

命令三: mvn test 这个命令可以进行单元测试,测试test文件夹下的方法(test文件夹下的java文件格式名为:XxxTest.java)

命令四: mvn package 将项目打包,如果是java项目就打包为.jar文件,如果是web项目及打包成.war文件。

命令五: mvn install 将一个项目打包放在本地仓库中,以便多个项目使用。


(五)在eclipse中配置Maven

我们之前在eclipse中创建了项目,那个使用eclipse中自带的Maven插件,我们想要用自己安装的Maven,需要在eclipse中配置:

在首选项的Maven中安装,add→directory中选择自己安装的目录。 然后别忘了勾选我们自己的Maven。


我们还需要指定我们Maven的仓库位置,也就是让eclipse知道我们的仓库在哪,我们只要将Maven中已经设置好的setting.xml指定给它就行,因为里面已经含有我们自定义仓库的位置,设置后下面就会自动出现我本地仓库的位置。

完成上面的操作后,我们还需要重构索引,即将仓库中的内容让eclipse加载一下:

这样就能在eclipse local Repository中查看我们本地仓库的内容了。

如果你完成了上述的操作,那么恭喜你,你的eclipse就完全支持maven操作了!


(六)创建Maven项目容易出现的问题

在创建好Maven项目后老是会出现一些问题: ①jdk版本出错 Maven(我的这个版本)默认是使用jdk1.5,如果你想要使用自己的jdk的话需要右击项目,build path ,edit一下当前项目使用的jdk就ok了。

②缺少web.xml 当我们创建好项目的时候可能缺少web.xml,这个时候我们需要自己手动的添加。

③刷新项目,jdk版本又返回jdk1.5 我们在做项目的时候,依赖在不断的增加,所以需要刷新项目来使得eclipse知道我们的jar包在哪,所以需要更新Maven项目: 右击项目→Maven→Update Project,然后我们的jdk会返回jdk1.5(因为项目默认jdk1.5),所以需要我们手动添加对jdk的约束:

设置全局的jdk,在setting.xml文件中的profiles元素下添加如下profile元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<profile>  
    <id>jdk17</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> 

设置局部的jdk,在项目的pom,xml文件中添加如下build元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<build>  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <configuration>  
                <source>1.8</source>  
                <target>1.8</target>
                <encoding>UTF-8</encoding>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>  

(七)添加依赖

做了那么多准备工作,下面我们就来试试Maven怎么进行依赖管理。 我们在Maven项目中创建一个Servlet,我们需要导入servlet-api.jar,只要在pom.xml 的dependencies视图下进行add就好了,如下图:

在涂鸦的搜索栏里搜索你想要的jar包,然后update Maven项目就ok了。


容易出现的问题: 搜索不出结果,试着做如下操作: 首选项→Maven→勾选涂鸦的选项

然后点击:

这样就会帮你下载一些常用jar包,过程有点慢,等待片刻! 最后Update Index 就ok了!

这样就可以放心的添加依赖了。


(八)依赖范围

在我们设置依赖的时候,会有一项Scope,里面有:

compile,provided,runtime,test,system五项。

(图片来自网络)

Maven默认的是compile,即对于编译classpath,测试classpath,运行时classpath 都需要这个jar包。 尤其值得注意的是provided,这个就像servlet-api那样,我们编译测试都需要这个jar包,但是当上传到服务器的时候就不再需要了(Tomcat的lib下有),如果这里我们默认compile,那么当程序在服务器上运行的时候将出现jar包的冲突!


(九)使用Maven运行web项目

在eclipse中,我们是直接打开Tomcat,并将项目添加到Tomcat上,Maven也可以直接启动Tomcat而不需要借助Eclipse,具体的步骤: 右击项目→Run As→Maven Build ... 然后在Goals中输入: tomcat:run,这样我们就将这个项目发布到服务器上了。

Debug: 右击项目→Debug As→Maven Build ... 然后在Goals中输入: tomcat:run,和发布不同的是,我们需要将项目的源码关联进来!

过程:点击Source→add→Project→你想Debug的项目。


(十)依赖冲突解决

什么叫依赖冲突,在介绍它和解决它之前,我们先来了解下什么事传递依赖: 在一个Maven项目中,我们导入一个包后,Maven会帮你把它的依赖包全部导入进来,例如:你导入Struts2-core-2.3.5.jar,它会帮你把Struts2工程所需要的包全部导入进来,如果导入进来的jar包又依赖其他jar包,Maven会继续导入这个其他jar包。

所以就会产生这样一个状况: A依赖B,B依赖C,A依赖C,这样叫一个传递依赖。

在上述的情况下,如果这个时候导入依赖D,D依赖C,这个时候就可能出现两个C,就会产生依赖冲突!

解决方案: 其实Maven不会让这两个jar包冲突,它有一套默认的调节原则: ①声明优先原则: 如果B依赖的C和D依赖的C冲突,那么使用B依赖的C jar包,因为B提前导入。 ②最短路径原则: 如果我们就是想要使用D依赖的C jar包,我们只需要自己手动add依赖即可,Maven优先使用我们手动添加的依赖!

除了上面的两种方案,还有两种叫分别叫做

①依赖排除 具体的实在pom.xml的依赖层次视图下进行:

这样就可以手动的排除你不想使用的依赖jar包了。

②版本锁定(推荐使用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>             
        </dependency>
    </dependencies>
  </dependencyManagement>

在配置文件里添加上面这个依赖管理,就可以指定我们想要的jar包版本,同时我们还可以使用ognl表达式来管理版本(当版本更新的时候)

当我们版本需要更新的时候,不必一个个去更换,只需要更换properties中的版本信息就Ok了!


总结: Maven给我们构建项目和依赖管理带来了很大的便利,再也不需要我们苦恼导入jar包,和jar包版本冲突,并且提供了一套从编译到发布的方法,大大提高和加快了我们项目的项目进度。

本章主要就Maven的一些简单用法做出了一点介绍,希望给大家一点启发,如果错误,不吝赐教,万分感激!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Maven课堂笔记
Apache Maven 是一个软件项目管理和依赖管理工具。基于项目对象模型 (POM:Project Object Model) 的概念,Maven 可以从一个中心信息块管理项目的构建、报告和文档。
闲花手札
2021/08/24
7300
Maven的爱恨情仇
在如今的互联网项目开发当中,特别是Java开发中,可以说Maven是随处可见。Maven的仓库管理、依赖管理、继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那么一个多模块的项目足以让你头疼,依赖冲突就会让你不知所措,甚至搞不清楚项目是如何运行起来的。相信使用过Maven的人,一定曾经被Maven伤害过,但又不得不去让它来伤害,谁让它能给项目的构建提供便利呢。
xcbeyond
2020/04/02
4850
Maven教程2(Eclipse配置及maven项目)
  此处报错的原因是jdk版本问题,我们使用的maven的3.6.0jdk必须是1.7+当前使用的是1.5.所以我们需要修改jdk的版本,解决方式有两种。
用户4919348
2019/04/02
8770
Maven教程2(Eclipse配置及maven项目)
Maven的基本使用
分析:maven项目为什么这么小?没有jar。 需要jar吗?肯定需要。没有存在于maven项目里面,jar存在于哪?
用户5927264
2019/07/31
6600
Idea操作Maven超级详细使用 基础篇:
如今我们构建一个项目需要用到很多第三方的类库 Jar包 如写一个使用Spring的Web项目就需要引入大量的jar包, 而往往一个Jar包往往又会引用其他Jar包,缺少其中任何一个Jar包都会导致项目编译失败。 每开发一个项目都会需要大量的Jar包 , 一个普通的Java项目也许实际源码只有几MB甚至KB,但加上Jar之后也许就几十MB。 而同样的项目,如果我们使用 Maven 工程来构建,那么总体上工程的大小会小很多。部署至服务器中…
Java_慈祥
2024/08/06
6000
Idea操作Maven超级详细使用 基础篇:
Maven入门极简使用教程
如果7位程序员,使用的IDE,不同,则将来出问题的几率会很大;1.不同工具问题;2.将来升级问题;
张哥编程
2024/12/13
1650
Maven入门极简使用教程
Maven的基本使用
Maven就是Apache下的一个开源项目。它是用纯java开发的。是一个项目管理工具。使用Maven对java项目进行构建、依赖管理。
不愿意做鱼的小鲸鱼
2022/09/24
6590
Maven的基本使用
Maven
一、❀什么是Maven: 目前无论使用IDEA还是Eclipse等其他IDE,使用里面ANT工具。ANT工具帮助我们进行编译,打包运行等工作。 Apache基于ANT进行了升级,研发出了全新的自动化构建工具Maven。 Maven是Apache的一款开源的项目管理工具。 以后无论是普通javase项目还是javaee项目,我们都创建的是Maven项目。 Maven使用项目对象模型(POM-Project Object Model,项目对象模型)的概念,可以通过一小段描述信息来管理项目的构建, 报告
测试小能手
2022/11/07
2.9K0
Maven
Maven项目管理
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。
用户9645905
2023/11/01
3410
Maven项目管理
day47_Maven学习笔记
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。 Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上。主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。
黑泽君
2018/10/11
1K0
day47_Maven学习笔记
Maven自动化构建依赖管理工具
1Maven简介 Maven是一款自动化“构建”和“依赖”管理的工具。 2提出问题 2.1jar包管理问题 jar包从哪来的? 官网下载 CSND…… 51CTO…… …… jar包之间存在依赖关系 A jar包中用到了B jar包中的类,就说A依赖B。jar包之间普遍存在的依赖关系错综复杂,极大的增加了我们开发项目时jar包管理的难度。在jar包非常多的时候,手动管理几乎是不可能的。 spring-core依赖commons-logging commons-fileupload依赖commons-io …… 各个工程在开发时分别复制相同的jar包 更好的做法是各个工程对同一份jar包进行各自的引用。 2.2项目架构 以之前学习的技术来说,我们开发的都是单一架构的项目。 单一架构;整个项目只有一个工程。 但是,以后我们要开发分布式架构。 分布式架构:一个项目是由很多个工程组成的,而各个工程之间存在下面四种关系: 依赖:由Maven实现 继承:由Maven实现 聚合:由Maven实现 调用:需要借助其他分布式架构技术实现 Dubbo+Zookeeper组合 SpringBoot+SpringCloud组合 2.3自动化构建 构建的概念 “构建”其实就是以开发时所编写的代码为“原材料”去“生产”出来一个可以运行的项目过程。 我们开发的是工程,但是真正在服务器上运行的是工程“构建”的结果。 工程→一只鸡 构建→炖熟了 构建结果→可以吃的鸡 在没有具体使用Maven这样的构建工具前,其实在Eclipse中我们已经不知不觉的进行了构建的操作。 例如:清理、测试、编译、部署等等。
Java廖志伟
2022/03/07
5060
Maven自动化构建依赖管理工具
Maven(一)初识Maven
前言 在这之前一直都有去看关于Maven的相关介绍,但是没有到真正要用的时候,自己总是以为懂了。其实真的感觉Maven并没有想象的那么简单! 那我们该怎么去学习maven呢?接下来我将从:       初步认识maven,获取jar包的三个关键属性 --> 介绍仓库(获取的jar包从何而来)-->用命令行管理maven项目(创建maven项目) --> 用myeclipse创建maven项目 -->详细介绍pom.xml中的依赖关系(坐标获取、定位jar包的各种属性讲解)。 为什么要去使用maven呢? 举
用户1195962
2018/01/18
5.2K1
Maven(一)初识Maven
一个小时学会Maven
在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。
张果
2018/10/09
2.7K0
一个小时学会Maven
想自学Maven?推荐Maven极简高速入门及常规使用
笔者的工作经历中使用过Ant、Maven和Gradle,如果让笔者选择,笔者会首选Gradle。那为什么还要写Maven这篇内容呢?时下大部分公司都还在使用Maven,并且很多开源项目也在使用Maven,Maven有一些功能特性还是很不错的,很值得做总结记录。
JavaQ
2020/11/09
1.3K0
想自学Maven?推荐Maven极简高速入门及常规使用
【Maven】005-基于 IDEA 进行 Maven 依赖管理
Maven 依赖管理是 Maven 软件中最关键的功能之一。通过定义项目对象模型(POM)文件,Maven 能够自动解析项目的依赖关系,实现自动下载和管理这些依赖项。这一过程在 Maven 仓库的支持下进行,避免了开发人员手动下载和管理依赖的繁琐工作,并减少了版本冲突和依赖缺失的风险。
訾博ZiBo
2025/01/06
1710
【Maven】005-基于 IDEA 进行 Maven 依赖管理
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。Maven 的设计目标是提供一种更加简单、一致的方法来构建和管理项目,它通过使用一个标准的目录布局和一组默认的构建规则来减少配置的数量。
用户7954602
2024/11/28
4840
从零开始学 Maven:简化 Java 项目的构建与管理
maven
依赖冲突:一个项目A,通过不同依赖传递路径依赖于X,若在不同路径下传递过来的X版本不同,那么A应该导入哪个版本的X包呢?
周杰伦本人
2023/10/12
3710
maven
Maven入门
在学习Maven之前,我们先来看一下我们现在做的项目都有哪些问题。假设你现在做了一个crm的系统,项目中肯定要用到一些jar包,比如说mybatis,log4j,JUnit等,除了这些之外,你有可能用到你的同事开发的其他的东西,比如说别人做了一个财务模块或做了一个结算的模块,你在这里边有可能要用到这些东西。
楠羽
2022/11/18
4620
Maven入门
Maven快速学习教程
在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。
张果
2018/10/09
2.4K0
Maven快速学习教程
Maven(六)之依赖管理
前面讲了maven一些关于Maven的简单知识,今天我给大家分享一些Maven的依赖管理。我相信用过maven的人都知道,它很重要的功能就是通过依赖来添加jar包。 让我们领略一下Maven是怎么管理我们的jar包的。 一、Maven坐标 1.1、数学中的坐标   在平面上,使用 X 、Y 两个向量可以唯一的定位平面中的任何一个点   在空间中,使用 X、Y、Z 三个向量可以唯一的定位空间中的任意一个点 1.2、Maven 中的坐标   俗称 gav:使用下面三个向量子仓库中唯一定位一个 Maven 工程
用户1195962
2018/01/18
8720
Maven(六)之依赖管理
相关推荐
Maven课堂笔记
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验