关于Maven的配置与学习

1. 简介

官方说法:Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

个人译文:Apache Maven是一款软件项目管理及综合工具。基于项目对象模型这个概念,Maven能够从一个中心信息块管理项目的构建,报告和文档。

个人对于Maven的直观感受就是工程项目被生命化了,从一个项目的初始到开发结束,它都在帮助开发者做后援工作,相当于助长剂。对于我来说主要的是项目依赖问题,不用自己去拷jar包确实是方便许多。

2. Windows下安装和配置

某些IDE已经是集成了Maven了(例如:idea),但是这里还是说一下怎么从官网下载并且配置环境变量

2.1 下载Maven

Maven官网:https://maven.apache.org/

进入官网后可以点击Download下拉可见有多个下载链接。如果不是特殊爱好/用途,下载头两个压缩包其中一个解压就可以。

2.2 配置Maven

解压后进入我的电脑(右击)->属性->高级系统设置->环境变量,进入后点击新建..,变量名为M2_HOME,变量值为自己解压后Maven的位置,我这里为C:\tool\apache-maven-3.5.0

经过上面的配置变量已经有了,但是还需要配置Windows系统变量,这样才找的到Maven的路径(在cmd模式下使用mvn命令),这里只需要将%M2_HOME%\bin;加入到Path的最前端就可以了,如下图:

通过以上的配置在cmd下键入mvn -version出来一大串信息,包括Maven路径、版本等信息就说明配置成功

2.3 配置Maven镜像和本地仓库

本地仓库会从把从别的地方的jar包下载后本地保存,相当于一个缓存,如果说不配置它默认会下载至${user.home}/.m2/repository,如果需要配置到一个特定的目录只需要进入Maven的解压目录/conf/setting.xml文件,使用编辑器打开,然后修改里面的配置C:/...../localRepository

在使用Maven管理依赖时,它可能会去别的仓库下载jar包,有可能网速会受到限制,所以使用镜像下载是一个比较好的选择,这里我使用了阿里的镜像。

在setting.xml,我们可以看到下方有这一个项,这里只需要向里面添加代码

alimaven

central

aliyun maven

http://maven.aliyun.com/nexus/content/groups/public/

3. Maven仓库

关于Maven的仓库这里可以简单的理解为存放jar包的地方,一个云盘。

但是,关于存放的位置还是有略微的区别,有远近之分,近的看来有本地仓库和私服远的有中央仓库和其他私人仓库本地仓库:通过本地存储依赖包,在项目构建需要时直接提供

私服:由个人/组织搭建,在局域网上的服务器运行,由该服务器提供依赖包

中央仓库:Maven依赖包的主要来源

其他私人仓库:需要使用的依赖包在他人服务器而不在在中央仓库没有的情况下,需要自己配置远程的仓库,它在中央仓库找不到下会去该仓库查找,其配置如下:

companyname.lib1

http://download.companyname.org/maven2/lib1

按照个人理解,画了一个图,如下:

4. Maven的生命周期

4.1 clean周期

pre-clean

执行一些清理前需要完成的工作

clean

清理上一次构建生成的文件

post-clean

执行一些清理后需要完成的工作

在每一个周期有相应的Maven命令,比如,在重新构建项目需要把前面的清除,则可以在当前项目目录下cmd模式输入mvn clean || mvn post-clean

4.2 default周期

在default周期中包含了很多个阶段,其中这里列出比较常用的

compile

编译该项目的源代码

test

运行测试使用合适的单元测试框架

package

提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件

install

将包安装到本地存储库,它可以用作当地其他项目的依赖

deploy

复制最终的包到远程仓库与其他开发者和项目共享

关于install,可以使用mvn install命令将我们自己的项目添加/安装到我们的本地仓库,比如,我们在多模块开发时,因为项目的依赖有些模块是完全相同的,所以我们可以建立一个父工程,让其他相关的模块继承该父工程。父工程的打包方式是pom,这里在子工程中编译项目时就会遇到父工程依赖不存在的一些错误,这时就需要使用上述的命令mvn install将我们的项目安装到本地仓库。对于Maven工程,自己写的库需要打成jar包让其他项目依赖,也可以使用该命令

4.3 site周期

siet生命周期能够生成一些网页信息(基于POM所包含的信息)

pre-site

执行一些在生成项目站点之前需要完成的工作

site

生成项目站点文档

post-site

执行一些在生成项目站点之后需要完成的工作

site-deploy

将生成的项目站点发布到服务器上

当我使用之前博客上的Spring Boot会员系统测试site命令时执行了mvn site可在项目路径下看到target/site/index.html,点开后有关于该项目的各种依赖的详细信息,如下图:

在上述的周期中对应着各种Maven命令,有些命令可以同时键入,比如:mvn clean package,每个命令的执行都与Maven提供的插件有着一些密不可分的关系,这里可以看下这里的链接:

https://www.yiibai.com/maven/maven_build_life_cycle.html

https://blog.csdn.net/chaofanwei/article/details/36197183

https://www.cnblogs.com/build-up/p/4975827.html

https://www.cnblogs.com/avivaye/p/5341341.html

5. 项目开发中的Exception

这里举出两个例子,其一:

maven打包时报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test

这里可能是因为在打包时会自动执行测试命令,而Junit测试不通过导致的打包不成功,只需要添加下面的配置即可:

org.apache.maven.plugins

maven-surefire-plugin

2.4.2

true

其二:

在web项目中使用servlet和jsp时需要引入依赖来解决错误,但是在web发布时打成war包部署到tomcat就会报错,提示信息大概是类之间有冲突。这是因为tomcat已经有包含了servlet的依赖包,因此报错,这里只要在servlet和jsp的依赖中加入一个scope配置,如下:

javax.servlet

jsp-api

2.0

provided

在上面的依赖的scope中包含了几个选项,主要如下:

compile

编译(compile)时需要,测试时需要,运行时需要,打包时需要

provided

编译(compile)时需要,测试(test)时也需要   ,运行时不需要,打包时不需要

runtime

编译时不需要,测试时需要,运行时需要,打包时需要

test

编译时不需要,测试时需要,运行时不需要,打包也不需要

除了以上还有一个是system,但是个人没有怎么使用所以这里不做说明

6. 总结

关于以上的东西,个人在见解上可能还存在偏差,但是,Maven作为项目管理的一个工具,只需要把工具的主要功能发挥出来就行了。现在该要纠结的不应该是Maven存在的那些复杂的东西,而是把自己的代码写好先。

api报错 javaee maven_JavaEE关于Maven的配置与学习相关推荐

  1. api报错 javaee maven_maven test 换javaee6 无法加载spring的配置文件 ?报错-问答-阿里云开发者社区-阿里云...

    maven 构建的springmvc项目,执行mvn test 时 如果是 org.apache.openejb javaee-api 5.0-3 那么执行test可以通过 如果将version改为6 ...

  2. SpringBoot项目启动 报错:Error executing Maven. end tag name </settings> must match start tag name

    SpringBoot项目启动 报错:Error executing Maven. end tag name must match start tag name from line xxx 第一次创建s ...

  3. 【微信公众平台】〖问题〗微信公众平台测试号报错,redirect_uri域名与后台配置不一致,错误码10003

    [问题]微信公众平台测试号报错,redirect_uri域名与后台配置不一致,错误码10003 问题 解决 微信公众平台测试号网页授权获取用户基本信息配置需要注意以下三点: 1.接口配置信息,为URL ...

  4. eclipse xml文件报错_Maven教程6: Maven与Eclipse整合

    点击上方"Java技术前线",选择"置顶或者星标" 与你一起成长 一.安装Maven插件 下载下来的maven插件如下图所示:,插件存放的路径是:E:/Mave ...

  5. 高德地图根据经纬度调用api报错Uncaught Error: USERKEY_PLAT_NOMATCH(10009)

    一.翻车现场: 根据经纬度调用高德地图api获取相应信息的时候,报错 Uncaught Error: USERKEY_PLAT_NOMATCH(10009) 二.解决方案: 经过排查发现,是高德中的k ...

  6. react使用百度地图api报错BMap找不到的

    1.初学react 引入百度地图api后不管怎么引入都是报错,也从网上找个很多帖子看了,也不管用,直到我打印了window来看后发现 很有可能是版本的原因吧所以得这么使用 test文件夹:------ ...

  7. 微信公众平台 - 微信内置浏览器 WeixinJSBridge.invoke(‘xxx‘) API 报错:system:access_denied(常见于微信支付、分享朋友圈/转发好友等功能)解决方案

    前言 场景描述:做公众号网页项目,在微信内置浏览器中运行自己的 H5 网站,需要接入微信支付.微信分享等其他能力,因此使用 WeixinJSBridge 这个 API,不料却发生报错. 如下报错所示, ...

  8. 调用百度API 报错:Open api qps request limit reached

    最近在做车辆检测的项目需要用到百度车辆检测接口,遇到此问题.目前网上大部分回答都是说额度不够的原因,但我这里还有剩余额度.最后发现是QPS(服务器每秒查询率)限额问题,如图QPS限制为2. 而我这里的 ...

  9. oracle 修改po税api_PO退回接收API报错,大神来看下

    按照metalink上说明来操作的退货数量为1的时候可以退,超过1就报错:错误: 为接收输入的数量大于可用数量.要接收数量与已接收数量之和 3 大于订货量与超量接收允差之和 0. 下面 :QUANTI ...

最新文章

  1. sed 替换_Linux中sed的用法
  2. referer 访问控制
  3. Android直连SQLServer
  4. static 成员小记
  5. opencv,用摄像头识别贴片元件的定位和元件的角度(转载)
  6. eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创
  7. [生产力]在线免费的EDA工具,可编辑AD\EAGLE等文件
  8. 实现1.1、1.1.1的多级编号文档排版
  9. 精品餐饮业奢华西餐专业PPT模板
  10. Guarded Blocks 保护块
  11. /usr/bin/env: ‘node’: Input/output error
  12. Twitter账号老被封?一文教会你怎么养号
  13. 脚手架的这个好搭档 今天要重点来介绍下!
  14. CentOS 7.7 配置防火墙
  15. 今天面了个腾讯拿30k出来的,真是小母牛按门铃,牛逼到家了
  16. 微信小程序使用mock.js
  17. 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常
  18. 服务器系统网口,服务器网口设置方法
  19. P4844 LJJ爱数数 数论
  20. Spine 导出视频 音效事件

热门文章

  1. Jmeter操作mysql数据库测试
  2. 关于Java抽象类,接口与实现接口及派生类继承基类
  3. 【电脑使用经验】怎么查看无线网络中电脑的IP地址?
  4. css -- 两种方法实现流式布局
  5. OPENCV-2 学习笔记
  6. 印尼发生洪灾和山体滑坡 致多人死亡数千人撤离
  7. 【Python爬虫学习笔记1】网络协议及请求基础
  8. 1 week110的zookeeper的安装 + zookeeper提供少量数据的存储
  9. 安全专家在硬盘固件中发现NSA的网络间谍程序
  10. 伯纳德•罗森伯格先生参加华为技术2016首届国际光电连接技术研讨会