Maven就是这么简单
2019独角兽企业重金招聘Python工程师标准>>>
什么是Maven
Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中..
**Maven是一款跨平台的项目管理工具,**是一个开源的项目...
Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理...
POM怎么理解呢???
- 我们使用Java是面向对象编程,对象就是我们的类
- 而Maven是面向项目,把我们的项目看做成是一个对象来进行管理
为什么要使用Maven??
在没有使用Maven之前,我们的jar包是不是非常杂乱???看一下我存放jar包的地方
在没有学习Maven之前,我还想过把这些jar包一一整理出来,万一硬盘坏了,那我的jar包又要去重新找了..而且由于jar包版本的问题,已经吃过不少亏...这就需要大量时间去整理jar包了...
曾经想手动打jar包,结果Intellij idea好像不太支持这种功能??【我还没找到】....于是只能依靠原生的jar 命令去打jar包了,过了一阵子,想重新打jar包的时候,又忘记命令了...非常苦恼...
而我们的Maven就非常好地解决了上面这两种情况了,当然了,Maven的功能并不是只有这么一丢丢,我只是举了两个小例子而已...随着我们的学习,你将会看到Maven的强大之处...
Maven可以管理项目的整个声明周期,包括清除、编译,测试,报告、打包、部署等等。
自动构建项目
- 软件开发: 可行性分析、需求分析、软件设计、软件开发、发布、运维
- 软件构建: 软件已经开发完毕,需要构建成一个产品进行发布 构建步骤:
- 清除--> 编译-->测试-->报告-->打包(jar\war)-->安装-->部署到远程 maven可以通过一个命令实现自动构建软件项目
Maven拥有“约定优于配置“这么一个理念,也就是说,把一些规范约定下来,人们就这么用!如果我们事先约定好所有项目的目录结构,标准开发过程(编译,测试) , 所有人都遵循这个约定。软件项目的管理就会变得简单很多。比如:如何过马路(红灯停绿灯行),如何开门,关门等。
安装Maven
去官网下载Maven软件,解压过后就算安装完毕了...
配置环境变量
因为Maven是由Java编写的,因此想要使用Maven,首先要配置Java的环境变量...
检测安装Maven是否成功,在控制台上打上 mvn -version就行了...
Maven目录结构
- bin:含有mvn运行的脚本
- boot:含有plexus-classworlds类加载器框架
- conf:含有settings.xml配置文件
- lib:含有Maven运行时所需要的java类库
- Settings.xml 中默认的用户库: ${user.home}/.m2/repository[通过maven下载的jar包都会存储到指定的个人仓库中]
- Maven默认仓库下载地址在: maven的lib目录下maven-model-builder-3.0.4.jar的pom.xml中
在我们Maven中,有本地仓库这么一个概念,我们可以在settings.xml配置文件中修改本地仓库的位置,比如我把本地仓库放到桌面上
IDEA下使用Maven
详情可参照详细的Maven教程---Idea环境下
值得追加的是:在修改web.xml路径的时候,那篇博文并没有给出绝对的路径...这里可能有些人不知道怎么写。我给出来参考
X:\Users\ozc\Desktop\zhongfucheng3\src\main\webapp\WEB-INF\web.xml
maven术语
在我们上一篇中已经知道了在Intellij idea下是如何使用Maven的了,创建出来的目录结构是这样子的:
上面的目录结构就是Maven所谓的”约定“,我们使用Maven来构建Java项目,都是这种目录结构的...
接下来我们来了解一下Mavaen一些常用的术语
仓库
本地仓库
- Maven会把我们项目所构建出来的jar包等等资源存放在本地仓库中。当我们需要jar包的时候,Maven第一时间也是去本地仓库中寻找jar包
中心仓库:
- ** 当Maven在本地仓库和私服找不到我们需要的jar包的时候,就去中心仓库中帮我们下载对应的jar包**。那Maven怎么知道去哪里下载呢??其实Maven已经配置好的了
apache-maven-3.2.1\lib\maven-model-builder-3.2.1\org\apache\maven\model下的POM.xml文件中已经配置好了
<repositories><repository><id>central</id><name>Central Repository</name><url>http://repo.maven.apache.org/maven2</url><layout>default</layout><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><name>Central Repository</name><url>http://repo.maven.apache.org/maven2</url><layout>default</layout><snapshots><enabled>false</enabled></snapshots><releases><updatePolicy>never</updatePolicy></releases></pluginRepository></pluginRepositories>
私有服务器
- 存储一些jar包的服务器,由于本地仓库不可能拥有大部分的jar包,一个团队要去开发,免不了总是去中心仓库下载,这就非常耗费时间了。如果私有服务器拥有这些jar包,那么每台电脑就不用去中心仓库中下载了...
maven软件构建的生命周期
软件的生命周期就是以下
-** 清除--> 编译-->测试-->报告-->打包(jar\war)-->安装-->部署**
maven生命周期命令插件
当我们使用idea环境下开发,maven生命周期的插件就非常清晰了...
maven坐标
- 坐标的组成: groupId + artifactId+ version
- groupId:组id ,机构名,公司名:好比公司的id,或者是公司包名 alibaba ——-》高德--》5.01版本
- artifactId:构建物id ,产品名或者产品的id
- version :版本号
- jar包组成: artifactId-version.jar
pom.xml介绍
pom.xml介绍 :project object model 项目对象模型 ,它是maven核心配置文件
当我们把上面的术语了解完以后,对下面pom.xml配置文件就不会感到陌生了。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>zhongfucheng3</groupId><artifactId>zhongfucheng3</artifactId><version>1.0-SNAPSHOT</version></project>
如果我们想要我们的项目能够有Junit测试的开发包,我们只要指定对应的jar包依赖就行了..
scope应用范围有test、compile等等,默认是compile,那么test和compile有什么区别呢?
- 间接依赖问题 :依赖的jar包必须是 compile 范围,假如是test范围,则发布的jar包不会包含test范围依赖的jar包,和依赖关系
<scope>test</scope>
Maven【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】
前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找--->私有仓库--->中心仓库...
然而,我们的本地仓库常常没有想要的jar包的,而经常去中心仓库下载这就非常浪费时间和资源了...因此我们一般都有一个私有仓库...
另外有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库
准备步骤
我们使用的是nexus框架来搭建私服,它属于sonatype 机构的开源框架,用该框架架设maven 私有服务器
Nexus环境搭建
- 第一步:下载nexus-webapp-1.9.2.4.war包,然后拷贝到tomcat下的webapps目录中
- 第二步:启动tomcat 默认登录账户密码为: admin admin123
- 第三步:访问http://localhost:8080/项目名称/
tomcat会自动解析war包,然后就自动下载插件...
访问该项目,进到首页
登陆...
仓库介绍
- proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用
- Hosted:是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里
- Group:是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。我今天就发现,明明构件已经更新了,在浏览器里却看不到,还以为是BUG,其实是被浏览器缓存了
- virtual:也是中央仓库镜像,支持M1老版本
每个仓库的作用:
- 3rd party: 无法从公共仓库获得的第三方发布版本的构件仓库
- Apache Snapshots: 用了代理ApacheMaven仓库快照版本的构件仓库
- Central: 用来代理maven中央仓库中发布版本构件的仓库
- Central M1 shadow: 用于提供中央仓库中M1格式的发布版本的构件镜像仓库
- Codehaus Snapshots: 用来代理CodehausMaven 仓库的快照版本构件的仓库
- Releases: 用来部署管理内部的发布版本构件的宿主类型仓库
- Snapshots:用来部署管理内部的快照版本构件的宿主类型仓库
仓库组是一个虚拟的概念,就是通过对实体仓库(proxy、hosted)进行聚合, 对外暴露一个统一的地址这里要注意的是,放到左边的仓库,才是会被聚合的仓库
仓库组的配置顺序:
上传jar包到私服
直接通过网站上传,把桌面上的pig-0.12.1.jar上传到私有服务器中
再次查看的时候,已经上传上去了
从私服依赖jar包
在pom.xml文件配置私服的路径、组id、版本等等
<!-- 假如没有私服 ,则 本地仓库找不到,则访问中心仓库假如有私服 :访问顺序首先访问本地仓库本地仓库没有,则访问私服仓库私服仓库也没有,则访问中心仓库--><!-- 加载的是 第三方项目使用的jar包 --><repositories><repository><snapshots><enabled>true</enabled></snapshots><id>public</id><name>public</name><url>http://localhost:8080/nexus-2.6.2/content/groups/public/</url></repository></repositories><!-- 加载的是maven生命周期插件的jar包 --><pluginRepositories><pluginRepository><releases><updatePolicy>never</updatePolicy></releases><snapshots><enabled>true</enabled></snapshots><id>public</id><name>public</name><url>http://127.0.0.1:8080/nexus-2.6.2/content/groups/public/</url></pluginRepository></pluginRepositories>
在本地仓库中也把私服的jar包下载下来了
把本地项目发布到私服
server的配置可以在Maven的settings.xml中写上
<!-- 分销管理 ,把jar包发布到私服中 --><!-- 配置服务器--><server><id>releases</id><username>admin</username><password>admin123</password></server><server><id>snapshots</id><username>admin</username><password>admin123</password></server>
值得注意的是:你得留意你用的是哪个Maven,是你自己下载的Maven还是使用Idea集成的Maven,如果没有配置的话,那么就会出现401错误。
<distributionManagement><!-- 发布到 快照版本的仓库,即 测试版本仓库 --><snapshotRepository><id>snapshots</id><url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/snapshots/</url></snapshotRepository><!-- 发布到 发行版本的仓库中,也可以发布到3rd party 仓库 --><repository><id>releases</id><url>http://127.0.0.1:8080/nexus-2.6.2/content/repositories/releases/</url></repository>
再次查看仓库组
总结
- Maven能够很好地管理我们的项目,还能够管理我们的jar包。在构建项目的时候十分方便。
- 安装Maven需要配置JAVA_HOME环境变量。
- Settings.xml 配置了我们的本地仓库位置。
- 过度去中心仓库去加载jar包的话,会非常影响性能的。我们搭建一个私有仓库的话,如果私有仓库有对应的jar包,就可以直接在私有仓库中找了。
- 学会如何在私有仓库的页面上上传jar包上去
- 学会如何在项目上关联私有仓库的jar包
- 学会如何把本地项目上传到私有仓库中。
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y
转载于:https://my.oschina.net/u/3777556/blog/1631138
Maven就是这么简单相关推荐
- SSM+Maven+Dubbo+Zookeeper简单项目实战以及易错注意点
最近为了熟悉Dubbo远程过程调用架构的使用,并结合SSM+Maven整合了简单的一套项目实战 直接看项目结构图 各模块介绍 dubbo-common:存放项目需要的公众类,像查询模型.数据库实体模型 ...
- Maven 私服的简单使用
所有的 Java 开发者应该是没有没用过 Maven 的吧.Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发.打包.测试.部署等一系列行为.而包管 ...
- 关于Maven(mvn)的简单学习
Maven(mvn) 在开始之前我先来谈一谈我的学习方法,我在学习认识新东西之前是按照三步走来学习的,即:是什么?做什么?怎么学? 那接下来就让我们按照三步走来学习一下Maven 1.Maven 是什 ...
- Maven项目的简单打包
最简单的方法 首先是在maven项目的pom.xml中添加打包的插件,这里有很多种方式的.最最简单的就是只使用maven-compiler-plugin.maven-jar-plugin插件,并且指定 ...
- 【maven3学习之三】maven构建一个简单的Hello World
2019独角兽企业重金招聘Python工程师标准>>> 在写之前我先需要配置一下setting.xml. 首先是localRepository,默认情况下是[你的用户目录]/.m2/ ...
- Maven私服的简单搭建教程(Nexus)
2019独角兽企业重金招聘Python工程师标准>>> 第一步,下载nexus的安装包并解压 链接:http://pan.baidu.com/s/1jIhpZ98 密码:6bqx 如 ...
- Eclipse·Maven·构建SpringMVC简单工程-3
2019独角兽企业重金招聘Python工程师标准>>> 接上篇,我们Maven的基本框架已经搭建完成.后续加入Spring MVC的基础依赖.完整pom.xml如下 <proj ...
- 关于maven的创建简单的servlet
打开maven官网下载maven,本次演示使用的是maven-3.5.0 maven官网下载链接 1>下载之后首先要配置环境变量,和java配置环境变量一致.配置不多介绍,不会配置的推荐以下博客 ...
- Linux中用maven创建一个简单的项目
maven简介 maven是Apache旗下的管理java项目jar包的项目管理工具,有了它可以很方便的构建管理java项目. 安装maven maven下载地址 http://maven.apach ...
最新文章
- python读取excelsheet-一文看懂用Python读取Excel数据
- Netbeans学习总结
- centOS安装python
- php mysql 查询 区分大小写_MySQL查询字符串时区分大小写
- : Content type 'text/plain;charset=UTF-8' not supported
- 浅谈WebKit之Port
- Akka并发编程——第三节:Actor模型(二)
- SAP Spartacus list view里router-outlet的填充逻辑
- 《数据驱动安全:数据安全分析、可视化和仪表盘》一1.2.4 统计学
- 美团数据库运维自动化系统构建之路
- 移动端 H5 分屏页面适配问题--设计稿比例与设备宽高比例不同
- 一文看懂数据挖掘:哪一种方法最好?都需要哪些技术?
- 小米首部5G手机正式发布 海外营收将很快超过国内
- Android Studio第二十七期 - RecycleView不同item布局
- 升级http到https
- python怎样画立体图-Python学习(一) —— matplotlib绘制三维轨迹图
- virtualbox导致Windows7重启
- 度量 数据突变_使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?
- 一个详细介绍CPU Memory Kernel的博客
- CImageList使用指南