【Maven教程】(二)安装配置篇:手把手教你安装及配置Maven环境~

news2024/11/24 6:26:07

Maven安装配置篇

  • 1️⃣ 在 Windows 上安装 Maven
      • 1.1 下载及安装 Maven
      • 1.2 升级 Maven
  • 2️⃣ 在基于UNIX 的系统上安装 Maven
      • 2.1 下载和安装
      • 2.2 升级 Maven
      • 2.3 安装目录分析
      • 2.4 设置 HTTP 代理
  • 3️⃣ 在 IDE中安装Maven插件

在这里插入图片描述


1️⃣ 在 Windows 上安装 Maven

在安装 Maven 之前,首先要确认已经正确安装了JDK,Maven 可以运行在JDK 1.4及以上的版本。打开 Windows 的命令行,运行下面的命令来检查 Java安装:

echo %JAVA_HOME%
java -version

结果如下图所示:

在这里插入图片描述
命令首先检查环境变量 JAVA_HOME 是否指向了正确的JDK 目录,接着尝试运行 java 命令。如果 Windows 无法正确执行 java 命令,或者无法找到 JAVA_HOME 环境变量,就需要检查 Java是否正确安装了, 或者环境变量是否设置正确。

1.1 下载及安装 Maven

访问 Maven 的下载页面:Maven下载 , 其中包含针对不同平台的各种版本的 Maven 下载文件。对于首次接触 Maven 的朋友来说,推荐使用 Maven 3.0, 因此需要下载 apache-maven-3.0-bin.zip。 当然,如果对 Maven 的 源码感兴趣并想自己构建 Maven, 还可以下载 apache-maven-3.0-src.zip。 该下载页面还提供 md5 校验和 (checksum) 文件 和 asc数字签名文件,可以用来检验 Maven 分发包的正确性和安全性。

然后将安装文件解压到指定的目录中,接着需要设置环境变量,将 Maven 安装配置到操作系统环境中。打开系统属性面板 ( 在桌面上右击 “我的电脑” → “属性” ), 单击高级系统设置, 再单击环境变量 , 在系统变量中新建一个变量, 变量名为 MAVEN_HOME,变量值为 Maven 的安装目录如 D:\bin\apache-maven-3.0。单击 “确定” 按钮,接着在系统变 量中找到一个名为 Path 的变量, 在变量值的末尾加上 %MAVEN_HOME%\bin;。注意:多个值之间需要有分号隔开,然后单击 “确定” 按钮。至此,环境变量设置完成。详细情况如图所示。

在这里插入图片描述
值得注意的是Path环境变量。当我们在cmd中输入命令时,Windows首先会在当前目录中寻找可执行文件或脚本,如果没有找到,Windows会接着遍历环境变量Path中定义的路径。由于将 %MAVEN_HOME%\bin 添加到了Path中,而这里 %MAVEN_HOME%\bin 实际上是引用了前面定义的另一个变量,其值是Maven的安装目录。因此,Windows会在执行命令时搜索目录 D:\bin\apache-maven-3.0\bin, 而 mvn执行脚本的位置就是这里。

了解环境变量的作用之后,现在打开一个新的 cmd 窗口(这里强调新的窗口是因为新的环境变量配置需要新的 cmd 窗口才能生效),运行如下命令检查 Maven 的安装情况:

echo %MAVEN_HOME%
mvn -v

运行结果如图所示。

在这里插入图片描述
第一条命令 echo %MAVEN_HOME% 用来检查环境变量 MAVEN_HOME安装目录;而 mvn -v执行一条Maven命令,以检查 Windows是否能够找到正确的 mvn。

1.2 升级 Maven

Maven更新比较频繁,因此用户往往会需要更新Maven安装以获得更多、更酷的新特性,并避免一些旧的bug。
在Windows上更新Maven非常简便,只需要下载新的Maven安装文件,解压至本地目录,然后更新 MAVEN_HOME环境变量即可。例如,假设Maven推出了新版本3.1,我们将其下载然后解压至目录 D:\bin\apache-maven-3.1,接着遵照前一节描述的步骤编辑环境变量 MAVEN_HOME,更改其值为 D:\bin\apache-maven-3.1。至此,更新就完成了。同理,如果需要使用某一个旧版本的 Maven,也只需要编辑 MAVEN_HOME 环境变量指向旧版本的安装目录。

2️⃣ 在基于UNIX 的系统上安装 Maven

Maven 是跨平台的,它可以在任何一种主流的操作系统上运行。本节将介绍如何在基于 UNIX的系统(包括LinuxMacOS以及 FreeBSD等)上安装Maven。

2.1 下载和安装

首先,与在 Windows上安装Maven一样,需要检查JAVA_HOME环境变量以及Java命令,这里对细节不再赘述。命令如下:

echo $JAVA_HOME
java -version

接着到 http://maven.apacheorg/download.html 下载 Maven安装文件,如 apache-maven-3.0-bin.tar.gz,然后解压到本地目录:

tar -xvzf apache-maven-3.0-bin.tar.gz

现在已经创建好了一个Maven安装目录 apache-maven-3.0。虽然直接使用该目录配置环境变量之后就能使用Maven了,但推荐做法是在安装目录旁平行地创建一个符号链接,以方便日后的升级:

ln -s
1s -l

接下来,需要设置 MAVEN_HOME环境变量指向符号链接,并且把 Maven安装目录下的 bin/文件夹添加到系统环境变量PATH中:

export MAVEN_HOME=/home/juven/bin/apache-maven
export PATH=$PATH:MAVEN_HOME/bin

一般来说,需要将这两行命令加入到系统的登录 shell脚本中去,以 Ubuntu8.10为例,编辑 ~/.bashre文件,添加这两行命令。这样,每次启动一个终端,这些配置就能自动执行。
至此,安装完成。可以运行以下命令检查 Maven安装:

echo $MAVEN_HOME
mvn -v

2.2 升级 Maven

在基于UNIX的系统上,可以利用符号链接这一工具来简化 Maven的升级,不必像在Windows上那样,每次升级都必须更新环境变量。前一小节中我们提到,解压 Maven安装包到本地之后,平行地创建一个符号链接,然后在配置环境变量时引用该符号链接,这样做是为了方便升级。现在,假设需要升级到新的 Maven3.1版本,将安装包解压到与前一版本平行的目录下,然后更新符号链接指向3.1版的目录便可:

rm apache-maven
ln -s apache-maven-3.1/apache-maven
1s -1

同理,可以很方便地切换到Maven的任意一个版本。现在升级完成了,可以运行 mvn -v进行检查。

2.3 安装目录分析

前面讲述了如何在各种操作系统中安装和升级Maven。现在来仔细分析一下Maven的安装文件。

前面讲到设置 MAVEN_HOME环境变量指向Maven的安装目录,本书之后所有使用MAVEN_HOME的地方都指代了该安装目录。下面看一下该目录的结构和内容:

bin
boot
conf
lib
LICENSE.txt
NOTTCE.txt
README.txt

(1)bin
该目录包含了mvn运行的脚本,这些脚本用来配置Java命令,准备好 classpath 和相关的Java系统属性,然后执行Java命令。其中mvn是基于UNIX平台的 shell脚本,mvn.bat是基于 Windows平台的 bat脚本。在命令行输入任何一条mvn命令时,实际上就是在调用这些脚本。该目录还包含了mvnDebugmvnDebug.bat两个文件,同样,前者是UNIX平台的 shell脚本,后者是 Windows平台的 bat脚本。那么 mvnmvnDebug 有什么区别和关系呢?

打开文件我们就可以看到,两者基本是一样的,只是mvnDebug多了一条MAVENDEBUGOPTS配置,其作用就是在运行 Maven时开启 debug,以便调试 Maven本身。此外,该目录还包含 m2.conf文件,这是 classworlds 的配置文件,后面会介绍 classworlds
(2)boot
该目录只包含一个文件,以maven3.0为例,该文件为 plexus-clasworlds-2.2.3.jarplexus-classworlds 是一个类加载器框架,相对于默认的 java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。更多关于classworlds的信息请参考 http://classworlds.codehaus.org/。对于一般的Maven用户来说,不必关心该文件。
(3)conf
该目录包含了一个非常重要的文件 settings.xml。直接修改该文件,就能在机器上全局地定制 Maven的行为。一般情况下,我们更偏向于复制该文件然后修改该文件,在用户范围定制 Maven的行为。后面将会多次提到 settings.xml,并逐步分析其中的各个元素。
(4)lib
该目录包含了所有 Maven运行时需要的Java类库,Maven本身是分模块开发的,因此用户能看到诸如 maven-core-3.0.jarmaven-model-3.0.jar之类的文件。此外,这里还包含一些Maven用到的第三方依赖,如 common-eli-1.2.jargoogle-collection-1.0.jar等。对于 Maven2来说,该目录只包含一个如 maven-2.2.1-uber.jar的文件,原本各为独立JAR文件的 Maven模块和第三方类库都被拆解后重新合并到了这个JAR文件中。可以说,lib目录就是真正的Maven。关于该文件,还有一点值得一提的是,用户可以在这个目录中找到Maven内置的超级POM,这一点在后面会详细解释。
(5)其他
LICENSE.txt记录了Maven使用的软件许可证ApacheLicenseVersion2.0; NOTICE.txt 记录了Maven包含的第三方软件;而 README.txt则包含了Maven的简要介绍,包括安装需求及如何安装的简要指令等。

除了以上部分,下面介绍 ~/. m2部分。先运行一条简单的命令:mvnhelp:system。该命令会打印出所有的Java系统属性和环境变量,这些信息对我们日常的编程工作很有帮助。这里暂不解释help:system涉及的语法,运行这条命令的目的是让Maven执行一个真正的任务。我们可以从命令行输出看到Maven会下载maven-help-plugin,包括pom文件和jar文件。这些文件都被下载到了Maven本地仓库中。

现在打开用户目录,比如当前的用户目录是 C:\Users\JuvenXu\, 你可以在VistaWindows7中找到类似的用户目录。如果是更早版本的Windows,该目录应该类似于C:\Doc-umentandSetings\JuvenXu\。在基于UNIX的系统上,直接输入ed 回车,就可以转到用户目录。

在用户目录下可以发现.m2文件夹。默认情况下,该文件夹下放置了Maven本地仓库.m2/repository。所有的Maven构件都被存储到该仓库中,以方便重用。可以到 ~/ .m2/reposi-tory/org/apache/maven/plugins/maven-help-plugins/ 目录下找到刚才下载的 maven-help-pluginpom文件和 jar文件。Maven根据一套规则来确定任何一个构件在仓库中的位置,这一点在后面文章中将会详细阐述。由于Maven仓库是通过简单文件系统透明地展示给Maven用户的,有些时候可以绕过Maven直接查看或修改仓库文件,在遇到疑难问题时,这往往十分有用。

默认情况下,~/.m2目录下除了 repository仓库之外就没有其他目录和文件了,不过大多数Maven用户需要复制MAVEN_HOME/conf/settings.xml文件到 ~/.m2/setings.xml

2.4 设置 HTTP 代理

有时候你所在的公司基于安全因素考虑,要求你使用通过安全认证的代理访问因特网。这种情况下,就需要为Maven配置HTTP代理,才能让它正常访问外部仓库,以下载所需要的资源。

首先确认自己无法直接访问公共的Maven中央仓库,直接运行命令ping repol.maven.org 可以检查网络。如果真的需要代理,先检查一下代理服务器是否畅通。比如现在有一个IP地址为 218.14.227.197,端口为 3128的代理服务,我们可以运行 telnet 218.14.227.197 3128来检测该地址的该端口是否畅通。如果得到出错信息,需要先获取正确的代理服务信息;如果 telnet连接正确,则输入ctrl+], 然后q, 回车,退出即可。

检查完毕之后,编辑 ~/ .m2/settings.xml 文件(如果没有该文件,则复制 $MAVEN_HOME/conf/settings.xml)。添加代理配置如下:

<settings>
	<proxies>
		<proxy>
			<id>my-proxy</id>
			<active>true</active>
			<protocol>http</protocol>
			<host>218.14.227.197</host>
			<port>3128</port>
			<!--
			<username>***</username>
			<password>***</password>
			<nonProxyHosts>repository.mycom.com|*.google.com</nonProxyHosts>
			-->
		</proxy>
	<proxies>
</settings>

这段配置十分简单,proxies下可以有多个proxy元素,如果声明了多个proxy元素,则默认情况下第一个被激活的proxy会生效。这里声明了一个idmy-proxy的代理,active的值为true表示激活该代理,protocol表示使用的代理协议,这里是http。当然,最重要的是指定正确的主机名(host元素)和 端口(port元素)。上述XML配置中注释掉了username、password、nonProxyHost几个元素。当代理服务需要认证时,就需要配置usemame和passwordnonProxyHost元素用来指定哪些主机名不需要代理,可以使用“丨”符号来分隔多个主机名。此外,该配置也支持通配符,如*.google.com表示所有以google.com结尾的域名。

3️⃣ 在 IDE中安装Maven插件

本节会先介绍如何在NetBeans上安装Maven插件,如果正在使用NetBeans6.7及以上版本,那么Maven插件已经预装了。你可以检查Maven插件安装,单击菜单栏中的工具,接着选择插件,在弹出的插件对话框中选择已安装标签,应该能够看到Maven插件。

如果在使用NetBeans6.7之前的版本,或者由于某些原因NetBeansMaven插件被卸载了,那么就需要安装NetBeansMaven插件。下面以NetBeans6.1为例,介绍Maven插件的安装。

单击菜单栏中的工具,选择插件,在弹出的插件对话框中选择可用插件标签,接着在右边的搜索框内输人Maven,这时会在左边的列表中看到一个名为Maven的插件。选择该插件,然后单击下面的“安装”按钮。

接着在随后的对话框中根据提示操作,阅读相关许可证并接受,NetBeans会自动帮我们下载并安装Maven插件,结束之后会提示安装完成。之后再单击插件对话框中的已安装标签,就能看到已经激活的Maven插件。

最后,为了确认Maven插件确实已经正确安装了,可以看一下NetBeans是否已经拥有创建Maven项目的相关菜单。在菜单栏中选择文件,然后选择新建项目,这时应该能够看到项目类别中有Maven一项。选择该类别,右边会相应地显示Maven项目和基于现有POM的Maven项目。


温习回顾上一篇(点击跳转)
《【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~》

继续阅读下一篇(点击跳转)
《》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/904773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试专题】Java核心基础篇②

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;Java面试专题 目录 1.接口和抽象类有什么区别&#xff1f; 2.两个对象的 hashCode() 相同&#xff0c;则 equals()也一定为 true&#xff0c;对吗&#xff1f; 3.说一说hashCode()和equals()的…

一般文章让你了解mybatis,以及如今在Java开发的地位!

一.了解mybatis&#xff01; A.什么是mybatis&#xff1f; MyBatis是一个开源的持久层框架&#xff0c;它简化了在Java应用程序中使用关系型数据库的开发工作。MyBatis提供了将SQL语句和Java代码进行解耦的能力&#xff0c;使得应用程序可以通过简单的配置来访问数据库&#x…

【AI视频教程】只需5步,AI作出鸡你太美视频

1.视频效果 黄昏见证虔诚的信徒 2.准备工作 制作视频效果&#xff0c;需要准备下面3个条件&#xff1a; 准备stable diffusion的环境剪辑一段【鸡你太美】原版视频stable diffusion安装sd-webui-IS-NET-pro插件 2.1部署stable diffusion环境 部署步骤参考制作ikun图片的文章…

软件开发中常用数据结构介绍:C语言队列

工作之余来写写C语言相关知识&#xff0c;以免忘记。今天就来聊聊C语言实现循环队列&#xff0c;我是分享人M哥&#xff0c;目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问&#xff0c;可底下评论&#xff01; 如果觉得文章内容在工作学习中有帮助到你&…

基于springboot+vue的考研资讯平台(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Python中Setup.py的作用是什么

Python中Setup.py的作用是什么 今天就跟大家聊聊有关Python中Setup.py的作用是什么&#xff0c;可能很多人都不太了解&#xff0c;为了让大家更加了解. 1. 为什么需要对项目分发打包? 平常我们习惯了使用 pip 来安装一些第三方模块&#xff0c;这个安装过程之所以简单&#…

高项4.项目管理核心技术.

第一部分 项目管理概论 价值驱动的项目管理知识体系: 十二项原则;生命周期四个阶段;五个过程组;十大PM知识领域;八大绩效域;外加价值交付系统; 自1987 年以来, PMBOK 一直是基于过程的项目管理标准的重要代表,项目管理从业者一 直坚持基于过程的项目管理方法。随着…

用python从零开始做一个最简单的小说爬虫带GUI界面(1/3)

目录 前言 三节博客内容概要 PyQt5的配置 设置软件的快捷启动方式 1. 用于设计界面的程序 2. 将Qt Designer设计出来的ui文件转化为py文件 3. 可以把py文件打包成可执行的exe文件 4. 将ico图片放在qrc文件中&#xff0c;再将qrc文件转换成py…

Axios跨域请求处理

问题背景&#xff1a; vue 项目用 axios 进行请求的时候&#xff0c;总是报“Access to XMLHttpRequest at ‘http://localhost:8889/api/login’ from origin ‘http://localhost:8080……’”的错误 实际上就是前后端分离的情况下&#xff0c;发生了跨域的问题 跨域定义&…

AWS SDK 3.x for .NET Framework 4.0 可行性测试

前言 为了应对日益增长的网络安全挑战, 越来越多的互联网厂商已经陆续开始或者已经彻底停止了对 SSL 3 / TLS 1.0 / TLS1.1 等上古加密算法的支持. 而对于一些同样拥有悠久历史的和 AWS 服务相关联的应用程序, 是否可以通过仅更新 SDK 版本的方式来适应新的环境. 本文将以 Win…

PyTorch模型性能分析与优化

动动发财的小手&#xff0c;点个赞吧&#xff01; 训练深度学习模型&#xff0c;尤其是大型模型&#xff0c;可能是一项昂贵的支出。我们可以使用的管理这些成本的主要方法之一是性能优化。性能优化是一个迭代过程&#xff0c;我们不断寻找提高应用程序性能的机会&#xff0c;然…

基于Java+SpringBoot+vue前后端分离在线动漫信息系统设计实现

基于JavaSpringBootvue前后端分离在线动漫信息系统设计实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于JavaSpringBootvue前后端分离在线动漫信息系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完…

基于单片机串口控制直流电机调速

一、系统方案 (2)本设计采用STC89C5单片机作为主控器&#xff0c;串口控制直流电机调速&#xff0c;串口助手发送1-8&#xff0c;改变电机速度&#xff0c;数码管显示对应速度。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 TMOD0x21;//定…

Linux学习之ssh和scp

ls /etc/ssh可以看到这个目录下有一些文件&#xff0c;而/etc/ssh/ssh_config是客户端配置文件&#xff0c;/etc/ssh/sshd_config是服务端配置文件。 cat -n /etc/ssh/sshd_config | grep "Port "可以看一下sshd监听端口的配置信息&#xff0c;发现这个配置端口是22…

代码随想录算法训练营之JAVA|第三十三天|738. 单调递增的数字

今天是第33天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天&#xff0c;如果做不到&#xff0c;完成一件评论区点赞最高的挑战。 算法挑战链接 738. 单调递增的数字https://leetcode.cn/problems/monotone-increasing-digits/ 第一想法 题目理解&#xff1a;找到一个…

2023国赛数学建模B题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

C++进阶 类型转换

本文简介&#xff1a;介绍C中类型转换的方式 类型转换 C语言中的类型转换为什么C需要四种类型转换C强制类型转换static_castreinterpret_castconst_castdynamic_cast RTTI&#xff08;了解&#xff09;总结 C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型…

数据同步后数据总条数对不上的问题解决

文章目录 [toc] 1.问题2.解决办法2.1&#xff09;设置合理的线程池参数2.2&#xff09;设置url连接参数2.3) 优化msql的系统参数2.4&#xff09;使用CountDownLatch减法计数器和数据插入的公共方法新开一个事务2.5&#xff09;sql批量注入器执行成功后&#xff0c;当前线程slee…

蛊卦-拨乱反正

目录 前言 卦辞 爻辞 总结 前言 题外话&#xff0c;今天占卜时&#xff0c;看错了&#xff0c;以为占到了蛊卦&#xff08;后续会对自己的占卦经历进行补充&#xff0c;不断完善这个易经学习的专栏&#xff09;&#xff0c;那顺便就学习一下蛊卦&#xff0c;蛊惑人心&#…

线程和进程同步互斥你真的掌握了吗?(同步互斥机制保姆级讲解与应用)

目录 同步互斥的概念 互斥锁 初始化互斥锁 销毁互斥锁 申请上锁 解锁 案例1&#xff1a;没有互斥锁 多任务的运行情况 案例2&#xff1a;有互斥锁 多任务的运行情况 死锁 读写锁 初始化读写锁 销毁读写锁 申请读锁 申请写锁 释放读写锁 案例&#xff1a;两个任务…