• 近期将进行后台系统升级,如有访问不畅,请稍后再试!
  • 极客文库-知识库上线!
  • 极客文库小编@勤劳的小蚂蚁,为您推荐每日资讯,欢迎关注!
  • 每日更新优质编程文章!
  • 更多功能模块开发中。。。

Maven就是这么简单

什么是 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 可以管理项目的整个声明周期,包括清除、编译,测试,报告、打包、部署等等。
自动构建项目
  • 软件开发: 可行性分析、需求分析、软件设计、软件开发、发布、运维
  • 软件构建: 软件已经开发完毕,需要构建成一个产品进行发布
    构建步骤:
  • 清除–> 编译–>测试–>报告–>打包(jarwar)–>安装–>部署到远程 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:UsersozcDesktopzhongfucheng3srcmainwebappWEB-INFweb.xml

maven 术语

在我们上一篇中已经知道了在 Intellij idea 下是如何使用 Maven 的了,创建出来的目录结构是这样子的:
这里写图片描述
上面的目录结构就是 Maven 所谓的”约定“,我们使用 Maven 来构建 Java 项目,都是这种目录结构的…
接下来我们来了解一下 Mavaen 一些常用的术语

仓库

本地仓库
  • Maven 会把我们项目所构建出来的 jar 包等等资源存放在本地仓库中。当我们需要 jar 包的时候,Maven 第一时间也是去本地仓库中寻找 jar 包
中心仓库:
  • ** 当 Maven 在本地仓库和私服找不到我们需要的 jar 包的时候,就去中心仓库中帮我们下载对应的 jar 包**。那 Maven 怎么知道去哪里下载呢??其实 Maven 已经配置好的了
apache-maven-3.2.1libmaven-model-builder-3.2.1orgapachemavenmodel 下的 POM.xml 文件中已经配置好了
 <repositories>
   <repository>
     <id>central</id>
     <name>Central Repository</name>
     <layout>default</layout>
     <snapshots>
       <enabled>false</enabled>
     </snapshots>
   </repository>
 </repositories>

 <pluginRepositories>
   <pluginRepository>
     <id>central</id>
     <name>Central Repository</name>
     <layout>default</layout>
     <snapshots>
       <enabled>false</enabled>
     </snapshots>
     <releases>
       <updatePolicy>never</updatePolicy>
     </releases>
   </pluginRepository>
 </pluginRepositories>
私有服务器
  • 存储一些 jar 包的服务器,由于本地仓库不可能拥有大部分的 jar 包,一个团队要去开发,免不了总是去中心仓库下载,这就非常耗费时间了。如果私有服务器拥有这些 jar 包,那么每台电脑就不用去中心仓库中下载了…

maven 软件构建的生命周期

软件的生命周期就是以下
-** 清除–> 编译–>测试–>报告–>打包(jarwar)–>安装–>部署**

maven 生命周期命令插件

当我们使用 idea 环境下开发,maven 生命周期的插件就非常清晰了…
这里写图片描述

maven 坐标

  1. 坐标的组成: groupId + artifactId+ version
  • groupId:组 id ,机构名,公司名:好比公司的 id,或者是公司包名
    alibaba ——-》高德–》5.01 版本
  • artifactId:构建物 id ,产品名或者产品的 id
  • version :版本号
  1. jar 包组成:
    artifactId-version.jar

pom.xml 介绍

pom.xml 介绍 :project object model 项目对象模型 ,它是 maven 核心配置文件
当我们把上面的术语了解完以后,对下面 pom.xml 配置文件就不会感到陌生了。
<?xml version=”1.0″ encoding=”UTF-8″?>
   <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>
       </repository>
   </repositories>

   <!– 加载的是 maven 生命周期插件的 jar 包 –>
   <pluginRepositories>
   <pluginRepository>
       <releases>
           <updatePolicy>never</updatePolicy>
       </releases>
       <snapshots>
           <enabled>true</enabled>
       </snapshots>
       <id>public</id>
       <name>public</name>
   </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>
 </snapshotRepository>
 <!– 发布到 发行版本的仓库中,也可以发布到 3rd party 仓库 –>
 <repository>
   <id>releases</id>
 </repository>
再次查看仓库组
这里写图片描述

总结

  • Maven 能够很好地管理我们的项目,还能够管理我们的 jar 包。在构建项目的时候十分方便。
  • 安装 Maven 需要配置 JAVA_HOME 环境变量。
  • Settings.xml 配置了我们的本地仓库位置。
  • 过度去中心仓库去加载 jar 包的话,会非常影响性能的。我们搭建一个私有仓库的话,如果私有仓库有对应的 jar 包,就可以直接在私有仓库中找了。
  • 学会如何在私有仓库的页面上上传 jar 包上去
  • 学会如何在项目上关联私有仓库的 jar 包
  • 学会如何把本地项目上传到私有仓库中。

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Maven 就是这么简单
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

欢迎 注册账号 登录 发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00