Maven就是这么简单

什么是Maven

Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,全部的项目配置信息都被定义在一个叫作POM.xml的文件中..

Maven是一款跨平台的项目管理工具,是一个开源的项目...html

Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理...java

POM怎么理解呢???web

  • 咱们使用Java是面向对象编程,对象就是咱们的类
  • 而Maven是面向项目,把咱们的项目看作成是一个对象来进行管理

为何要使用Maven??

在没有使用Maven以前,咱们的jar包是否是很是杂乱???看一下我存放jar包的地方apache

这里写图片描述

在没有学习Maven以前,我还想过把这些jar包一一整理出来,万一硬盘坏了,那个人jar包又要去从新找了..并且因为jar包版本的问题,已经吃过很多亏...这就须要大量时间去整理jar包了...编程

曾经想手动打jar包,结果Intellij idea好像不太支持这种功能??【我还没找到】....因而只能依靠原生的jar 命令去打jar包了,过了一阵子,想从新打jar包的时候,又忘记命令了...很是苦恼...浏览器

而咱们的Maven就很是好地解决了上面这两种状况了,固然了,Maven的功能并非只有这么一丢丢,我只是举了两个小例子而已...随着咱们的学习,你将会看到Maven的强大之处...缓存

Maven能够管理项目的整个声明周期,包括清除、编译,测试,报告、打包、部署等等。tomcat

自动构建项目服务器

  • 软件开发: 可行性分析、需求分析、软件设计、软件开发、发布、运维
  • 软件构建: 软件已经开发完毕,须要构建成一个产品进行发布

构建步骤:微信

  • 清除--> 编译-->测试-->报告-->打包(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:\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.1libmaven-model-builder-3.2.1orgapachemavenmodel下的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软件构建的生命周期

软件的生命周期就是如下

- 清除--> 编译-->测试-->报告-->打包(jarwar)-->安装-->部署

maven生命周期命令插件

当咱们使用idea环境下开发,maven生命周期的插件就很是清晰了...

这里写图片描述

maven坐标

  1. 坐标的组成: groupId + artifactId+ version

    • groupId:组id ,机构名,公司名:比如公司的id,或者是公司包名
      alibaba ——-》高德--》5.01版本
    • artifactId:构建物id ,产品名或者产品的id
    • version :版本号
  2. 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
相关文章
相关标签/搜索