Maven的安装以及介绍
附录:带阿里源的maven用户设置文件-settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
--> <pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
-->
</pluginGroups> <proxies>
<!-- proxy
| Specification for one proxy, to be used in connecting to the network.
|
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>proxyuser</username>
<password>proxypass</password>
<host>proxy.host.net</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
-->
</proxies> <servers>
<!-- server
| Specifies the authentication information to use when connecting to a particular server, identified by
| a unique name within the system (referred to by the 'id' attribute below).
|
| NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
| used together.
|
<server>
<id>deploymentRepo</id>
<username>repouser</username>
<password>repopwd</password>
</server>
--> <!-- Another sample, using keys to authenticate.
<server>
<id>siteServer</id>
<privateKey>/path/to/private/key</privateKey>
<passphrase>optional; leave empty if not used.</passphrase>
</server>
-->
</servers> <mirrors>
<mirror><id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors> <profiles>
</profiles> </settings>
1、 maven的介绍
2、 maven的安装配置
3、 安装maven插件m2e
4、 创建maven工程
5、 Maven的核心概念
a) 坐标
b) 依赖管理
c) 生命周期
d) 插件
e) 继承
f) 聚合
6、 maven的仓库管理以及私服(nexus)的搭建
一、Maven简介以及使用背景
why:
1、都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行?
2、为什么在我的机器上可以正常打包,而配置管理员却打不出来?
3、项目组加入了新的人员,我要给他说明编译环境如何设置,但是让我挠头的是,有些细节我也记不清楚了。
4、我的项目依赖一些jar包,我应该把他们放哪里?放源码库里?
5、这是我开发的第二个项目,还是需要上面的那些jar包,再把它们复制到我当前项目的svn库里吧
6、现在是第三次,再复制一次吧 ----- 这样真的好吗?
7、我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组
-----这不是一个好的分发机制,太多的环节可能导致出现bug
项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署,太麻烦了。
what:
Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进管理的工具。
Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上
Maven主要有两大功能:管理依赖、项目构建。
依赖指的就是jar包
二、Maven安装以及简单命令(有的低版本没有内置Maven或者Maven版本过低就要自己安装喽)
1、安装以及配置
①:去官网下载最新版本的Maven
②:解压到你的目录里,建议放在jdk和ide放在一块,便于管理
③:配置MAVEN_HOME和path(和JDK配置一样,我就不解释了)
④:命令行输入“mvn -v”,如果有版本等信息输出说明装好了
2、命令
-compile 编译,生成字节码文件,默认生成target目录
-test 测试,生成测试结果信息,测试Test里面的断言是否正确,如果没有事先编译该命令就先执行 -compile
-clean 清空编译以及测试生成的字节码文件
-package 打包,默认打成jar包
-install 把jar包上传至本地仓库(默认在userhome/.m2 文件夹下,可以在这配置一个用户配置信息)
-deploy 如果配置了私服信息,就可以上传至私服(具体配置往后看)
三、安装m2e插件(高版本的自带有)
安装地址: http://download.eclipse.org/technology/m2e/releases
之后把出来的插件打对勾装上,然后重启eclipse就好了。
如果有不会的就参考百度:https://jingyan.baidu.com/article/77b8dc7f9e0c1a6174eab6d6.html
注意:有可能会遇到创建项目提示你某个jar包找不到无法加载。
原因:网络不好导致某些jar包下载失败。
解决办法:删除~/.m2/org/apache/maven/目录下的所有文件,然后找个网络好点的时间,打开myeclipse他会自动更新的。
有人说只要删除里面的plugings目录就好,但是本人亲测不太管用,还是上面全部删掉搞定。
四:创建项目
创建Maven project
创建一个简单的Maven模版
打包方式:如果一般项目或者maven model就用jar
如果是web项目或者web的控制层就用war,记得自己手动添加jsp页面和web.xml配置文件
如果是聚合项目的父工程就用pom,方便管理jar包和模块化开发
最后配置pom.xml,需要什么jar就导入什么
五、Maven的核心概念
1 坐标, Maven坐标主要组成
groupId:定义当前Maven组织名称
artifactId:定义实际项目名称
version:定义当前项目的当前版本
2 依赖管理
2.1 依赖范围
其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
2.test:测试依赖范围。只对于测试classpath有效
3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
4.runtime:运行时提供。例如:jdbc驱动
2.2 依赖传递
左边第一列表示第一直接依赖范围
上面第一行表示第二直接依赖范围
中间的交叉单元格表示传递性依赖范围。
总结:
- 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
- 当第二直接依赖的范围是test的时候,依赖不会得以传递。
- 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
- 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
2.3 依赖冲突----就近原则和覆盖原则
在maven中存在两种冲突方式:一种是跨pom文件的冲突,一致是同一个pom文件中的冲突。
跨pom:就近选择本pom
同pom:覆盖选择最后的pom配置
2.4 可选依赖
Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。
2.5 排除依赖
Exclusions标签可以排除依赖
3 生命周期
Maven有三个生命周期:clean生命周期、default生命周期、site生命周期
生命周期可以理解为项目构建的步骤集合。
生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段
3.1 Clean生命周期
pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作
3.2 Default生命周期(重点)
validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包。
compile 编译项目的源代码。
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources 复制并处理资源文件,至目标测试目录。
test-compile 编译测试源代码。
process-test-classes
test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其它项目依赖。
deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
在maven中,只要在同一个生命周期,你执行后面的阶段,那么前面的阶段也会被执行,而且不需要额外去输入前面的阶段,这样大大减轻了程序员的工作。
3.3 Site生命周期(忽略吧)
pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
4 插件
插件(plugin),每个插件都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是有插件来实现的。
1.4.1 编译插件--指定该项目运行时使用的jre版本号,前提目标机器必须有该jre
target:jre版本。 encoding:编译使用的编码方式
4.2 Tomcat插件
如果使用maven的tomcat插件的话,那么本地则不需要安装tomcat,可以直接部署运行,方便测试
4.2.1 创建maven的web工程
前四步省略,记得打成war包
第五步:创建WEB-INF及web.xml文件,从别处拷过来
第六步:创建index.jsp文件或者使用框架。。。
4.2.2 使用tomcat插件运行web工程
可以使用默认的tomcat版本启动,但是推荐自己配置版本
使用tomcat7来运行web工程,它的命令是:tomcat7:run
然后浏览器输入:http:localhost/就可以了,即http://ip:$port/$path
1.5 继承在依赖中指定父亲的gav坐标
好处:
①:父工程统一依赖jar包
在父工程中对jar包进行依赖,在子工程中都会继承此依赖。
②:父工程统一管理版本号--不推荐,因为子工程还得配置依赖信息,只是少个版本
dependencyManagement标签管理的依赖,其实没有真正依赖,它只是管理依赖的版本。
子工程的pom文件:
③:父工程抽取版本号--推荐,方便省事
1。6 聚合
在真实项目中,一个项目有表现层、业务层、持久层,对于业务层和持久层,它们可以在多个工程中被使用,所以一般会将业务层和持久单独创建为java工程,为其他工程依赖。
例如:
MavenProject:
根项目:MP--打包pom
MavenModel: 所有父工程都是MP
持久层:MPDao--打包jar
业务层:MPService--打包jar
变现层:MPController--打包war
六、Maven仓库以及私服管理
1)什么是Maven仓库?
用来统一存储所有Maven共享构建的位置就是仓库。根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:groupId/artifactId/version/artifactId-version.packaging
可以分为:本地仓库,远程仓库(中央仓库:apache的 和 私服:自己的)
2)为什么要使用私服
如图,假设没有私服每次下载jar包都要访问中央仓库,如果人多就导致网络阻塞。但是如果都访问局域网的仓库呢????
3)私服的搭建----nexus服务器
为所有来自中央仓库的构建安装提供本地缓存。
下载网站:http://nexus.sonatype.org/,下载新版本这里使用的2.11版本,内置jetty,所以直接运行就可以了
①:解压到jdk同层目录即可,一共俩文件夹
②:配置信息:conf/nexus.properties修改端口号和路径
# Jetty section
application-port=8081 #这里是端口号自己改
application-host=0.0.0.0 #访问地址,改成localhost即可
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus
# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF
③:启动nexus
.\nexus-2.12.0-01\bin\jsw\目录下有好多,根据你操作系统版本自己打开吧
如果出现报错就是jdk版本太低,推荐1.8
④:nexus管理页面
右上角登陆:默认帐号密码--admin/admin123
nexus仓库目录:
访问nexus,访问URL: http://localhost:8081/nexus-xxx
nexus仓库组:
仓库有4种类型 :
l group(仓库组):一组仓库的集合
l hosted(宿主):配置第三方仓库 (包括公司内部私服 )
l proxy(代理):私服会对中央仓库进行代理,用户连接私服,私服自动去中央仓库下载jar包或者插件
l virtual(虚拟):兼容Maven1 版本的jar或者插件
Nexus的仓库和仓库组介绍:
l 3rd party: 一个策略为Release的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构建
l Apache Snapshots: 一个策略为Snapshot的代理仓库,用来代理Apache Maven仓库的快照版本构建
l Central: 代理Maven中央仓库
l Central M1 shadow: 代理Maven1 版本 中央仓库
l Codehaus Snapshots: 一个策略为Snapshot的代理仓库,用来代理Codehaus Maven仓库的快照版本构件
l Releases: 一个策略为Release的宿主类型仓库,用来部署组织内部的发布版本构件
l Snapshots: 一个策略为Snapshot的宿主类型仓库,用来部署组织内部的快照版本构件
l Public Repositories:该仓库组将上述所有策略为Release的仓库聚合并通过一致的地址提供服务
配置默认可以从远程仓库下载索引文件:
⑤:配置所有jar都从私服下载
在本地仓库的setting.xml中配置如下:
<mirrors> <mirror> <!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central --> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8080/nexus-2.7.0-06/content/groups/public/</url> </mirror> </mirrors> |
⑥:往私服上传部署
第一步:Nexus的访问权限控制
在本地仓库的setting.xml中配置如下:
<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server> |
第二步:配置pom文件
在需要构建的项目中修改pom文件
<distributionManagement> <repository> <id>releases</id> <name>Internal Releases</name> <url>http://localhost:8080/nexus-2.7.0-06/content/repositories/releases/</url> </repository> <snapshotRepository> <id>snapshots</id> <name>Internal Snapshots</name> <url>http://localhost:8080/nexus-2.7.0-06/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> |
第三步:执行maven的deploy命令
Maven的安装以及介绍的更多相关文章
- maven mvn 安装介绍
maven是什么? Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具 Maven 除了以程 ...
- (二)Maven的安装与环境配置
想要安装 Apache Maven在Windows 系统上, 需要下载 Maven 的 zip 文件,并将其解压到你想安装的目录,并配置 Windows 环境变量. 所需工具 : 1.JDK 2.Ma ...
- Maven的安装、配置及使用入门
Maven的安装.配置及使用入门 本书代码下载 大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系,欢迎大家与 ...
- 1.Maven的安装及配置
1 Maven 介绍 Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”.本书将介绍Maven这一跨平台的项目管理工具.作为Apache组织中的一个颇为成功的开源项目,Maven ...
- 初识maven及其安装步骤!!
maven(01)--安装及其介绍 1:下载maven windows下载 2:将下载文件夹解压,然后放在一个安装目录(可任意选择),例如就放在D盘的根目录 然后在设置环境变量,新建一个环境变量, ...
- (二)Maven的安装与环境配置
主要内容 在Windows上安装Maven 安装目录分析 在Windows上安装Maven 本机环境:Windows10,JDK9.0.4. 想要安装Maven,需要下载Maven的zip文件,并将其 ...
- 教程:关于如何通过Maven仓库安装Spire系列的 Java产品
Spire系列库中已发布的Java产品目前有三个,即Spire.PDF for Java.Spire.Presentation for Java.Spire.Barcode for Java.使用该J ...
- Maven使用(一)—— Maven的安装与全局配置
一.Maven安装 Maven的安装步骤: 1.Maven官网(http://maven.apache.org/)下载压缩包,解压缩,当前最新版本是apache-maven-3.5.3-bin.zip ...
- Maven 的安装与配置
最近公司需要新起一个项目,想使用maven+springmvc+spring+mybatis+mysql实现,以前我们的项目都是传统的老项目,没用过maven,Eclipse版本是GALILEO的,有 ...
随机推荐
- RS-485半双工延时问题
学习485总线时,遇到延时问题,困扰很久.通过学习知道了485半双工收发时必须延时,以保证系统的稳定性.可靠性.好多资料都介绍了485 防静电.抗干扰电路.惟独没提 每一帧收发停止位(或第9位)的延时 ...
- 外置式与增量式PID模板程序(51单片机c语言)
外置式PID模板 #define MuBiaoCS 0 //目标常数 #define CHang_aCS 0 //比例常数 #define CHang_bCS 0 //积分常数 #define CHa ...
- Oracle数据库安全性设计
一.什么是安全的系统 安全性建设是一个长期并且卓绝的工作.作为一个符合标准的企业级系统,我们认为税务系统应该具备以下的安全性特点: ◆高可用性 ◆对敏感数据的访问控制能力. ◆监测用户行为的审计能力. ...
- VC 绘图,使用双缓冲技术实现
VC 绘图,使用双缓冲技术实现 - Cloud-Datacenter-Renewable Energy-Big Data-Model - 博客频道 - CSDN.NET VC 绘图,使用双缓冲技术实现 ...
- 关于javaScript事件委托的那些事
今天是第一次写稿,还是有那么一丢丢小鸡冻...回归正题啦... 关于javaScript事件委托不得不说的那些事,为什么要使用事件委托? 我们可以这么说,假设老板要分配一项任务,首先要秘书叫A君来到办 ...
- 关于android 数据库查询出现 _id column do not exist 的处理
查询的字段必须带上_id字段,否则就会出现此类异常,导致程序崩溃
- Windows 8 64位系统 在VS2010 32位软件上 搭建 PCL点云库 开发环境
Windows 8 64位系统 在VS2010 32位软件上 搭建 PCL点云库 开发环境 下载PCL For windows 软件包 到这个网站下载PCL-All-In-One Installer: ...
- Leetcode:1. Two Sum
public class TwoSum1 { public static void main(String[] args) { int[] nums = new int[]{2, 7, 11, 15} ...
- Storm在zookeeper上的目录结构
storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中). backtype.storm.cluster定义了两个重要 ...
- Entity Framework Code-First(5):Code First Conventions
Code First Conventions: We have seen how EF Code-First creates DB tables from domain classes in the ...