Maven 项目管理从未如此通畅

一,写在前面java

  Maven究竟是什么?它能作些什么?能为咱们的开发工做提供什么样的帮助?为何会有如此大的知名度?另外,常听大厂的人说“私服”,工具管理吧啦吧啦的一堆也是不明觉厉。相信仁者见仁,着智者见智了。鄙人不才,整理了一下以前的笔记,与诸君分享,值当饭后茶点,欢迎指点。web

 

二,场景模拟数据库

  情景一:平常开发中,好比作数据库操做,我须要引入诸如一下的jar包:apache

    

  程序编译的时候,各类阴差阳错,会出现“ClassNotFoundException”,何解?惟有各类排查,也是比较闹心却也司空见惯了。api

  情景二:有过.net开发的人知道,好比,常常出现膈应的Newtonsoft.Json找不到的尴尬,此时只能从Nuget从新获取,或者从别处引用,那么会引发情景三。缓存

  情景三:如今的开发工做分模块,分功能,分业务,分流程等的开发模式,程序猿A在一处引入某jar包,程序猿B在另出引入该jar包,这样会形成代码的混乱和冗余。安全

  情景四:我如今开发两个java项目A和B,其中项目A中的一些功能依赖于项目B中的某些类,也就是说项目A的运行,必须靠引入项目B打包后的jar文件才能执行。若是,项目B出现bug,那么A必须从新引入新的B的jar包。假设已是线上项目,会不会显得被动了呢?!架构

 

总结,手动的添加删除jar包,而引起各类“血案”。maven

 

三,说说Mavenide

  什么是架构?一个项目的总体架构的健全性,为项目的基本功能,规定了类和对象如何建立,如何协做,提供必要的支持性工做。

  关于Maven,看看百度百科的说法

   

  不过,我仍是喜欢网上有位大神总结“Maven的核心功能就是合理叙述项目间的依赖关系”。通俗的说,就是经过pom.xml文件的配置获取jar包,而再也不是手动添加jar包。其次,提供一个标准,配置文件不在杂乱无章,单元测试再也不哪哪都是。

  全部的Maven项目都包含着一个pom.xml,在这里记录着的<groupId><artifactId><version>等字段,这些字段在建立Maven项目时填写,后期也能够手动更改,Maven会依据它们来定位到该项目,进而完成jar的自动指引。

   Maven主要作两件事:

      统一管理jar包

      统一开发规范于工具

 

四,说说pom.xml

  pom.xml,这是Maven的核心配置文件,pom全称Project Object Model(项目对象模型),它描述的是整个Maven项目,或者说是Maven的描述文件:

<?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>com</groupId>

    <artifactId>crm</artifactId>

    <version>1.0-SNAPSHOT</version>

<dependencies>
  <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>RELEASE</version>

  </dependency>
</dependencies>

</project>

  说说这几个关键词

  1。groupId

   公司或组织的名称。通常groupId由三部分组成“[项目用途].[公司名].[项目名]”,好比com.alibaba.taobao

  2。artifactId

    项目名

  3。version

    所须要jar的版本。SNAPSHOT意为快照,说明该项目在开发中。

  以上三个元素,是Maven项目的基本坐标,很是厚重要。

  4。packing

    项目打包的类型,包括jar,war,rar,pom,ear,默认是jar

  5。dependencies和dependency

    简单的说,这里存放咱们开发所须要的jar包。好比,上面的junit,表示我测试单元所引入的jar包。再如,Maven项目中提示找不到javax.sevlet.api,会经过在这里添加依赖:

<dependency>

  <groupId>javax.servlet</groupId>

  <artifactId>javax.servlet-api</artifactId>

  <version>3.1.0</version>

  <scope>provided</scope>

</dependency>

 6。properties

    主要用来定义一些配置的属性,好比编码方式等

  7。build

    表示与构建相关的配置

<build>

    <plugins>

        <plugin>

            <groupId>org.mortbay.jetty</groupId>

            <artifactId>maven-jetty-plugin</artifactId>

            <version>6.1.7</version>

            <configuration>

                <connectors>

                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">

                        <port>8888</port>

                        <maxIdleTime>30000</maxIdleTime>

                    </connector>

                </connectors>

                <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}

                </webAppSourceDirectory>

                <contextPath>/</contextPath>

            </configuration>

        </plugin>

    </plugins>

</build>

 

五,Maven的仓库

  经过上面的pom.xml中配置,就能获得我开发中所须要的jar包,那么问题来了,这些jar在哪里,而我又怎么拿到呢?

  这就引入了Maven仓库的概念。

  Maven仓库分三种:本地仓库,第三方仓库(私服),中央仓库。

  1.本地仓库

    Maven项目建立后,在本地会有一个目录,在这里存放着几乎我所能用到的全部jar包,默认地址:$user.home/.m2/repository(我用mbp,cd usr/[电脑名]/.m2/ repository )。我也能够修改默认地址,经过Maven目录下conf/setting.xml,修改localRepository字段就行。

  2.第三方仓库

    又称内部中心仓库,也叫私服。

    通常由公司内部设立,只为本公司内部共享使用。它既能够做为公司内部构件协做和存档,也能够做为公用类库镜像缓存,减小外部访问和下载的频率。因此,对私服安全性问题要求很是的严格,须要单独配置,否则不能使用。

  3.中央仓库

    Maven内置了远程公用仓库,http://repo1.maven.org/maven2

    这是由Maven团队维护,里面大约有1亿个经常使用类库,包括了市面大部分开源项目的构件,任你挑选。

  总结,Maven项目获取jar包的过程

   

  优先会从本地仓库查找jar包,若是没有,可是配置了私服,就会请求私服,从私服里获取jar,若是没有,就会从中央仓库里获取,直到找到对应jar包,而后下载到本地仓库,以便下次使用。若是没有私服,就直接去中央仓库获取。

  

  先说这么多,后续再补。

相关文章
相关标签/搜索