当前位置: 首页 > 编程日记 > 正文

Maven学习笔记(二) :Maven的安装与配置

在Windows上安装Maven:

 1.  首先检查安装JDK
通过命令行运行命令:echo %JAVA_HOME% java  -version,能够查看当前java的安装文件夹及java的版本号,maven要求JDK的版本号必须在1.4以上。

2. 下载Maven
前往maven的下载页面:http://maven.apache.org/download.cgi下载最新或稳定版的maven,如:apache-maven-3.2.3-bin.zip。
3. 安装Maven
将压缩文件解压到你想要安装的文件夹下,比方我的路径是:D:\workspace\study\apache-maven-3.2.3。然后在系统的环境变量中新建一个变量,变量名为M2_HOME,变量值为Maven的安装文件夹 D:\workspace\study\apache-maven-3.2.3。
然后在系统变量path的末尾加上 %M2_HOME%\bin,如

做这些步骤的意义是,以后我们再命令行中输入命令时windows会自己主动在maven的安装文件夹\bin文件夹中扫描相关的命令。
4. 检查maven安装
通过输入echo %M2_HOME%mvn -v 来查看maven的安装文件夹及查看maven的版本号。

 5. maven更新
maven更新直接把新的maven解压,然后改动M2_HOME用户变量指向新的安装文件夹就可以。

安装文件夹分析:

1. M2_HOME
在M2_HOME所指向的文件夹下,有例如以下的内容:

  • bin
在该文件夹下包括了mvn的执行脚本,这些脚本用来配置java命令,准备classpath和相关的Java系统属性,然后执行java命令。在windows下经常使用的有mvn.bat 和 mvnDebug.bat,这两个文件由什么关系呢?两个文件基本一样,仅仅是mvnDebug比maven多了一条MAVEN_DEBUG_OPTS的配置,其作用就是在执行Maven时开启debug,以便调试Maven本身。
  • boot
该文件夹仅仅包括一个文件,以我当前的版本号为例,该文件为plexus-classworlds-2.5.1.jar,plexus-classworlds是一个类载入器,相对于默认的java类载入器,它提供了更丰富的语法以方便配置,maven使用该载入框架载入自己的类库。普通用户无需关心此文件。
  • conf
该文件夹包括了一个很关键的文件settings.xml,直接改动该文件,就能在机器上全局定制Maven的行为。普通情况下,我们更偏向于复制该文件至~/.m2/文件夹(~表示用户文件夹),然后在用户范围(而非独立于maven安装文件)定制Maven的行为。然后将慢慢分析当中的各个元素。
  • lib
该文件夹包括了全部Maven执行时须要的Java类库,maven本身是分模块进行开发的,因此能够看到诸如maven-core-3.2.3.jar和maven-model-3.2.3.jar之类的文件,此外还能够看到maven用到的第三方依赖。能够说,lib文件夹就是真正的maven。

2. ~/.m2
我们先执行一条简单的命令:mvn help:system,该命令会打印出全部的Java系统属性和环境变量,执行这条命令的目的是让Maven执行一个真正的任务。我们能够从命令行输出看到Maven会下载maven-help-plugin,包含pom文件和jar文件。这些文件都被下载到了Maven本地仓库中。
如今打开当前用户文件夹,在我的windows7中文件夹为C:\Users\chenlei.cl,在该文件夹下能够看到.m2文件夹,默认情况下该文件夹放置了Maven本地仓库.m2/repository。全部的Maven构件都被储存到该仓库中,以方便重用。能够到~/.m2/reposi-tory/org/apache/maven/plugins/maven-help-plugins/文件夹中找到刚才下载的maven-help-plugin的pom文件和jar文件。maven依据一套规则来确定不论什么一个构件在仓库中的位置(依据所谓的坐标),在后面章节会具体讲到。

安装m2eclipse:

m2eclipse是eclipse下一款十分强大的maven插件。
启动eclipse之后,在菜单中选择Help,然后选择Install New Software...,接着会看到一个Install对话框。单击Work with:字段边上的Addbutton,会弹出一个新的Add Repository对话框。在name字段中输入m2e,在location字段中输入http://download.eclipse.org/technology/m2e/milestones/1.6 ,(似乎最新版的Eclipse已经自带了m2eclipse), 然后单击OKbutton。Eclipse会下载m2eclipse安装网站上的资源信息。等待资源加载完毕之后,再将其所有展开,就能看到例如以下图所看到的的界面。

选择对应的组件之后,一路向下就可以。注意在下载过程中,可能会下载一些相关联的其它组件。

  卸载m2eclispe:
进入eclipse->help->Installation Details->Installed Software中选择m2eclipse相关的组件进行卸载就可以。

Maven安装最佳实践:

 1. 设置MAVEN_OPTS环境变量
通常可以设置MAVEN_OPTS的值为 -Xms128m -Xms512m,由于Java默认的最大可用内存往往不可以满足Maven执行的须要,比方在项目较大时,使用Maven生成项目网站须要占用大量的内存,假设没有该配置,则非常easy得到java.lang.OutOfMemeoryError,因此一開始就配置该变量是推荐的做法。
2. 配置用户范围settings.xml
Maven用户能够选择配置$M2_HOME/conf/settings.xml或者~/.m2/settings.xml,前者是全局范围的,整台机器上的全部用户都会直接受到该配置的影响,而后者是用户范围的,仅仅有当前用户才会受到该配置的影响。Maven会默认先使用~/.m2/settings.xml,假设不存在才会去使用$M2_HOME/conf/settings.xml。
推荐使用用户范围的settings.xml,主要是为了避免无意识地影响到系统中的其它用户,并且为了以后maven升级的方便,直接把配置文件从仓库拷过去就能够了。
3. 不要使用IDE内嵌的Maven
当eclipse集成Maven时,会安装上一个内嵌的eclipse,这个eclispe一般会比較新,但不一定非常稳定,往往和命令行使用的Maven不是同一个版本号。这里又会出现两个潜在的问题:首先,较新版本号的Maven存在非常多不稳定的因素,easy造成一些难以理解的问题;其次,除了IDE,也常常还会使用命令行的Maven,假设版本号不一致,easy造成构建行为的不一致。因此在IDE中配置Maven插件时使用与命令行一致的Maven。
在m2clipse环境中,单击菜单条中的Windows,然后选择Preferences,在弹出的对话框中,展开左边的Maven项,选择Installation子项,在右边的面板中,可以看到有一个默认的Embedded Maven安装被选中了。单击Add...button,然后选择Maven安装文件夹M2_HOME,加入完成之后选择这一个外部的Maven。



相关文章:

swift闭包

其实闭包就是函数 作为条件的函数 闭包表达式 首先声明一个数组 <code class"hljs cs has-numbering" style"display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: Source Code Pro, mono…

吴恩达老师深度学习视频课笔记:自然语言处理与词嵌入

Word representation&#xff1a;词嵌入(word embedding)&#xff0c;是语言表示的一种方式&#xff0c;可以让算法自动理解一些类似的词比如男人、女人&#xff0c;国王、王后等。通过词嵌入的概念&#xff0c;即使你的模型标记的训练集相对较小&#xff0c;也可以构建NLP(自然…

高文院士:为什么中国的AI发展必须要有开源开放平台?

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 31 日&#xff0c;由北京智源人工智能研究院主办的 2019 北京智源大会在国家会议中心开幕&#xff0c;本次大会围绕人工智能基础研究现状及面临的机遇和挑战、人工智能技术未来发展的核心方向等话题&#xff0c;…

libcurl断点下载遇到的问题

最近游戏把资源&#xff08;图片、配置、lua&#xff09;的加载、更新全部改了 &#xff0c;加载其实还好&#xff0c;就是不走之前的zip解压方式。 以前的大体流程&#xff1a; 下载 –> 启动 –> 解压 –> 更新 –> 进入游戏 现在的大体流程&#xff1a; 下载 –…

sqlite3数据的使用(xcode 7,ios9)

由于考虑将来还要开发Android版本app&#xff0c;为了移植方便&#xff0c;所以使用了sqlite3来做数据持久化&#xff0c;到时候把sql语句拷过去还能用。 1、 首先用xcode载入sqlite3类库 选择工程的TARGETS-build phases-link binary with libraries&#xff0c;点击“”按钮&…

吴恩达老师深度学习视频课笔记:序列模型和注意力机制

基础模型&#xff1a;比如你想通过输入一个法语句子来将它翻译成一个英语句子&#xff0c;如下图&#xff0c;seq2seq模型&#xff0c;用x<1>一直到x<5>来表示输入句子的单词&#xff0c;然后我们用y<1>到y<6>来表示输出的句子的单词&#xff0c;如何训…

七个开发者成就百亿市值公司?这个技术思路如今让阿里发扬光大

2015年&#xff0c;马云带领阿里巴巴集团的高管拜访了位于芬兰游戏公司supercell 这家公司开发出了《部落战争》、《皇室战争》、《海岛奇兵》等App端知名游戏图片来自多玩BBS社区但是&#xff0c;这么知名的游戏公司开发团队当时却不足7人&#xff01;整个团队好像cell一样&am…

Linux学习笔记之文件管理和目录管理类命令

在开始理解Linux文件管理和目录类命令之前&#xff0c;有必要先说一下&#xff0c;关于操作系统在计算机中都做了哪些工作。0、操作系统的工作1、文件管理&#xff0c;增删改查2、目录管理3、进程管理4、软件安装5、运行程序6、网络管理7、设备管理本次笔记介绍的是文件管理和目…

张钹、朱松纯、黄铁军等同台激辩:人工智能的“能”与“不能”

整理 | AI科技大本营编辑部出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10 月 31 日&#xff0c;由北京智源人工智能研究院主办的 2019 北京智源大会在国家会议中心开幕&#xff0c;本次大会吸引了国际人工智能领域的顶级专家学者参加&#xff0c;围绕人工智能基础…

ssqlit3.0数据库使用方法

由于考虑将来还要开发Android版本app&#xff0c;为了移植方便&#xff0c;所以使用了sqlite3来做数据持久化&#xff0c;到时候把sql语句拷过去还能用。 1、 首先用xcode载入sqlite3类库 选择工程的TARGETS-build phases-link binary with libraries&#xff0c;点击“”按钮&…

GCC中通过--wrap选项使用包装函数

在使用GCC编译器时&#xff0c;如果不想工程使用系统的库函数&#xff0c;例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free, new/delete函数&#xff0c;可以有两种方法&#xff1a; (1). 使用LD_PRELOAD环境变量&#xff1a;可以设置共享库的路径&…

[原]对Linux环境下任务调度一点认识

我一直以来有一个误解&#xff0c;那就是在终端运行某个程序时&#xff0c;按下Ctrl D时我误以为就是杀死了这个进程&#xff0c;今天才知道原来不是。比如我利用libevent在Linux环境下写了一个网络监听程序&#xff0c;当启动程序之后&#xff0c;就会一直监听本地的6789端口…

决策树的C++实现(CART)

关于决策树的介绍可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78880934 CART算法的决策树的Python实现可以参考&#xff1a; https://blog.csdn.net/fengbingchun/article/details/78881143 这里参考 https://machinelearningmastery.com/impl…

iOS开发-由浅至深学习block

作者&#xff1a;Sindri的小巢&#xff08;简书&#xff09; 关于block 在iOS 4.0之后&#xff0c;block横空出世&#xff0c;它本身封装了一段代码并将这段代码当做变量&#xff0c;通过block()的方式进行回调。这不免让我们想到在C函数中&#xff0c;我们可以定义一个指向函数…

Google和微软分别提出分布式深度学习训练新框架:GPipe PipeDream

【进群了解最新免费公开课、技术沙龙信息】作者 | Jesus Rodriguez译者 | 陆离编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】微软和谷歌一直在致力于开发新的用于训练深度神经网络的模型&#xff0c;最近&#xff0c;谷歌和微软分别…

fragment 横竖屏 不重建

2019独角兽企业重金招聘Python工程师标准>>> android:configChanges"screenSize|orientation" 这样设置 切屏时都不会重新调用fragment里面的onCreateView了 转载于:https://my.oschina.net/u/1777508/blog/317811

二叉树简介及C++实现

二叉树是每个结点最多有两个子树的树结构&#xff0c;即结点的度最大为2。通常子树被称作”左子树”和”右子树”。二叉树是一个连通的无环图。 二叉树是递归定义的&#xff0c;其结点有左右子树之分&#xff0c;逻辑上二叉树有五种基本形态&#xff1a;(1)、空二叉树&#xf…

swift实现ios类似微信输入框跟随键盘弹出的效果

为什么要做这个效果 在聊天app&#xff0c;例如微信中&#xff0c;你会注意到一个效果&#xff0c;就是在你点击输入框时输入框会跟随键盘一起向上弹出&#xff0c;当你点击其他地方时&#xff0c;输入框又会跟随键盘一起向下收回&#xff0c;二者完全无缝连接&#xff0c;那么…

行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019...

作者 | Jiaxu Miao、Yu Wu、Ping Liu、Yuhang Ding、Yi Yang译者 | 刘畅编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】在以人搜人的场景中&#xff0c;行人会经常被各种物体遮挡。之前的行人再识别&#xff08;re-id&#xff09;方法…

WinAPI: Arc - 绘制弧线

为什么80%的码农都做不了架构师&#xff1f;>>> //声明: Arc(DC: HDC; {设备环境句柄}X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer {四个坐标点} ): BOOL;//举例: procedure TForm1.FormPaint(Sender: TObject); constx1 10;y1 10;…

提高C++性能的编程技术笔记:跟踪实例+测试代码

当提高性能时,我们必须记住以下几点&#xff1a; (1). 内存不是无限大的。虚拟内存系统使得内存看起来是无限的&#xff0c;而事实上并非如此。 (2). 内存访问开销不是均衡的。对缓存、主内存和磁盘的访问开销不在同一个数量级之上。 (3). 我们的程序没有专用的CPU&#xff…

2019年不可错过的45个AI开源工具,你想要的都在这里

整理 | Jane 出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100)一个好工具&#xff0c;能提高开发效率&#xff0c;优化项目研发过程&#xff0c;无论是企业还是开发者个人都在寻求适合自己的开发工具。但是&#xff0c;选择正确的工具并不容易&#xff0c;有时这甚至是…

swift中delegate与block的反向传值

swift.jpg入门级 此处只简单举例并不深究&#xff0c;深究我也深究不来。对于初学者来说delegate或block都不是一下子能理解的&#xff0c;所以我的建议和体会就是&#xff0c;理不理解咱先不说&#xff0c;我先把这个格式记住&#xff0c;对就是格式&#xff0c;delegate或blo…

Direct2D (15) : 剪辑

为什么80%的码农都做不了架构师&#xff1f;>>> 绘制在 RenderTarget.PushAxisAlignedClip() 与 RenderTarget.PopAxisAlignedClip() 之间的内容将被指定的矩形剪辑。 uses Direct2D, D2D1;procedure TForm1.FormPaint(Sender: TObject); varcvs: TDirect2DCanvas;…

女朋友啥时候怒了?Keras识别面部表情挽救你的膝盖

作者 | 叶圣出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】随着计算机和AI新技术及其涉及自然科学的飞速发展&#xff0c;整个社会上的管理系统高度大大提升&#xff0c;人们对类似人与人之间的交流日渐疲劳而希望有机器的理解。计算机系统和机械人如果需要…

提高C++性能的编程技术笔记:构造函数和析构函数+测试代码

对象的创建和销毁往往会造成性能的损失。在继承层次中&#xff0c;对象的创建将引起其先辈的创建。对象的销毁也是如此。其次&#xff0c;对象相关的开销与对象本身的派生链的长度和复杂性相关。所创建的对象(以及其后销毁的对象)的数量与派生的复杂度成正比。 并不是说继承根…

swim 中一行代码解决收回键盘

//点击空白收回键盘 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { view.endEditing(true) }

WinAPI: SetRect 及初始化矩形的几种办法

为什么80%的码农都做不了架构师&#xff1f;>>> 本例分别用五种办法初始化了同样的一个矩形, 运行效果图: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 class(TForm)Butto…

Windows10上使用VS2017编译OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.6.2操作步骤

1. 从https://github.com/opencv/opencv/releases 下载opencv-3.4.2.zip并解压缩到D:\soft\OpenCV3.4.2\opencv-3.4.2目录下&#xff1b; 2. 从https://github.com/opencv/opencv_contrib/releases 下载opencv_contrib-3.4.zip并解压缩到D:\soft\OpenCV3.4.2\opencv_contrib-3…

swift 跳转网页写法

var alert : UIAlertView UIAlertView.init(title: "公安出入境网上办事平台", message: "目前您可以使用网页版进行出入境业务预约与查询&#xff0c;是否进入公安出入境办事平台&#xff1f;", delegate: nil, cancelButtonTitle: "取消", o…