zoukankan      html  css  js  c++  java
  • 【Java学习】Maven原理

    一、Maven能做什么

    https://www.limuke.top/archives/local-jar-mave

     1、假设我们有10个项目,都需要引入spring core模块,那么需要十份重复的Spring Core.jar和commons-logging.jar

       使用Maven:maven使用本地仓库存储的jar,所有项目都会公用仓库中的同一分jar

     2、Spring Core.jar必须同时引入版本兼容的commons-log.jar,否则会报错

       使用Maven:maven不需要关心这些问题,会自动引入Spring core.jar所需的兼容版本jar

    3、如果一个项目里面有个100个jar,不知道那些jar是彼此关联的,那些是互相排斥的,当需要升级版本时,增加或删除一些jar,很容易出各种问题

       使用Maven:maven升级jar,只需要把版本3.x改成4.x,他会自动解决那些问题

     概括的说:Maven是一个项目管理和综合工具。Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。Maven增加可重复性并负责建立相关的业务。

    二、Maven的安装和设置

    1、安装之前,首先确定你已经安装了JDK

    2、下载地址:http://maven.apache.org/download.cgi

    3、将安装文件解压到你指定的目录中

    4、配置环境变量,变量名M2_HOME,变量值为Maven的安装目录,修改path值,在变量值后面加上bin,例如:%M2_HOME%/bin

    5、测试maven环境,执行命令:mvn -v 

    三、从Maven模板创建一个项目

     1、整个项目的项目目录结构会自动创建

     2、所有的源代码放在文件夹/src/main/java/,所有的单元测试代码放入:/src/test/java/

     3、附加的一个标准的pom.xml被生成,这个Pom文件类似于Ant build.xml文件,它描述了整个项目的信息,一切“从目录结构”,项目的插件,项目依赖,如何构建这个项目等。

     4、Maven各个目录的解释说明

    5、pom的基本信息

     6、pom的依赖关系

     

    7、pom详解

      a、添加插件

     b、去除依赖

     c、继承

     d、聚合(通过一个大的项目来整合各个小的模块)

     e、指定在Build时需要的资源文件(resource)

     四、Maven的生命周期

    1、clear:移除上一次构建生成的文件

    2、compile:编辑项目的源代码

    3、test:使用单元测试框架进行测试,测试代码不会被打包或者部署

    4、package:接受编译好的代码,打包成可发布的格式

    5、install:将包安装到maven本地仓库,供本地其他maven项目使用

    6、deploy:将最终的包发布到远程仓库,供其他开发人员和maven项目使用。

    7、site:生成项目的站点文档

    五、Maven仓库

     在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构建。

    Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。

     任何一个构件都有其唯一坐标,根据这个坐标可以定义其在仓库中的唯一路径,这就是Maven仓库的布局方式。

    如:groupId=org.testing

           artfactId=testing

           version=5.8

      生成路径:org/testing/testing/5.8/testing-5.8-jdk15.jar

    六、Maven的依赖

     1、依赖的传递性

      一个复杂的项目会包含很多依赖,也有可能包含依赖其他构件的依赖。这个是Maven的强大特征之一,它支持了传递性依赖。

      依赖原则:路径优先原则,第一声明原则。

     解决依赖问题:

    通过调整dependency的顺序来解决:那个依赖的顺讯在前面就依赖那个

    自己添加一个denpendeny来解决:因为该路径是最小的

    通过exclusions元素排除不想要的传递性依赖。

    2、Version解释

     snapshot版本表示不稳定,处于开发中的版本,即快照版本

     release:表示趋于稳定,当前停止更新,可以用于发行的斑斑。

    场景:协同开发时,如果A依赖B,由于B频繁更新,B应该使用SNAPSHOT来标识自己。

    3、依赖范围Scope

    compile(默认):编译范围的依赖,它在编译和打包的时候都会把该依赖打包进去

    test:测试依赖范围,它在编译和打包的时候不会把该依赖打包进去

    provided:在编译和测试范围有效,最后生成war包时不会打包进去

    rumtime:运行时依赖,编译的时候不依赖

    import:导入依赖范围

    system:系统依赖范围

    转载:https://www.cnblogs.com/chhyan-dream/p/12037568.html

  • 相关阅读:
    Wannafly #4 F 线路规划
    PKUWC2018 随机算法
    noip模拟赛
    php 正则判断是否是手机号码 最新
    Onethink上传服务器后登录不了的问题
    【php中的curl】php中curl的详细解说
    50种网站引流量方式
    mysql ERROR 1045 (28000): 错误解决办法
    织梦DEDE分类信息实现联动筛选(支持多条件多级选项)解决方案
    dedecms新增联动类别后的使用方法
  • 原文地址:https://www.cnblogs.com/gtea/p/13656772.html
Copyright © 2011-2022 走看看