zoukankan      html  css  js  c++  java
  • Maven 专题(五):Maven核心概念详解(一)

    **Maven 的核心程序中仅仅定义了抽象的生命周期,而具体的操作则是由 Maven 的插件来完成的。**可是 Maven 的插件并不包含在 Maven 的核心程序中,在首次使用时需要联网下载。 下载得到的插件会被保存到本地仓库中。本地仓库默认的位置是:~.m2 epository。 如果不能联网可以使用我们提供的 RepMaven.zip 解压得到。

    1 约定的目录结构:

    约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须 能找到 Java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。 我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:
    ①通过配置的形式明确告诉它
    ②基于第三方工具或框架的约定 Maven 对工程目录结构的要求就属于后面的一种。

    现在 JavaEE 开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码, 能基于约定的就不进行配置。而 Maven 正是因为指定了特定文件保存的目录才能够对我们的 Java 工程进行 自动化构建。

    2 POM

    Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。 Maven 工程的核心配置。可以说学习 Maven 就是学习 pom.xml 文件中的配置。

    3 坐标:

    3.1 几何中的坐标

    [1]在一个平面中使用 x、y 两个向量可以唯一的确定平面中的一个点。
    [2]在空间中使用 x、y、z 三个向量可以唯一的确定空间中的一个点。

    3.2 Maven 的坐标

    使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。
    [1]groupid:公司或组织的域名倒序+当前项目名称
    [2]artifactId:当前项目的模块名称
    [3]version:当前模块的版本

      <groupId>com.atguigu.maven</groupId>  
      <artifactId>Hello</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
    

    3.3 如何通过坐标到仓库中查找 jar 包?

    [1]将 gav 三个向量连起来

    com.atguigu.maven+Hello+0.0.1-SNAPSHOT
    1
    [2]以连起来的字符串作为目录结构到仓库中查找

    com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar
    1
    ※注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install

    4依赖

    Maven 中最关键的部分,我们使用 Maven 最主要的就是使用它的依赖管理功能。要理解和掌握 Maven 的依赖管理,我们只需要解决一下几个问题:

    4.1依赖的目的是什么

    当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目 中以依赖的方式引入一个我们需要的 jar 包呢? 答案非常简单,就是使用 dependency 标签指定被依赖 jar 包的坐标就可以了。

    <dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>Hello</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>
    </dependency>

    4.2 依赖的范围

    大家注意到上面的依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范 围有几个可选值,我们用得到的是:compile、test、provided 三个。 [1]从项目结构角度理解 compile 和 test 的区别

    4.3 依赖的传递性

    4.4 依赖的排除

    如果我们在当前工程中引入了一个依赖是 A,而 A 又依赖了 B,那么 Maven 会自动将 A 依赖的 B 引入当 前工程,但是个别情况下 B 有可能是一个不稳定版,或对当前工程有不良影响。这时我们可以在引入 A 的时 候将 B 排除。
    [1]情景举例

    [2]配置方式

    复制代码; "复制代码")

    <dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>HelloFriend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>jar</type>
    <scope>compile</scope>
    <!-- 排除不必要的依赖-->
    <exclusions>

        <exclusion>               
        <groupId>commons-logging</groupId>               
        <artifactId>commons-logging</artifactId>           
        </exclusion>      

    </exclusions>
    </dependency>

    复制代码; "复制代码")

    [3]排除后的效果

    4.5 统一管理所依赖 jar 包的版本

    对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提 取出来 (与 JSTL 表达式类似)

    <properties>

    <atguigu.spring.version>4.1.1.RELEASE</atguigu.spring.version> 

    </properties>

    其中 atguigu.spring.version 部分是自定义标签。
    [2]引用前面声明的版本号

    复制代码; "复制代码")

    <dependencies>
          <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>    
                <version>${atguigu.spring.version}</version> 
         </dependency> …… </dependencies> 
    

    复制代码; "复制代码")

    [3]其他用法

    <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

    </properties>

    4.6 依赖的原则:解决 jar 包冲突

  • 相关阅读:
    CSUOJ 2192: Wells弹键盘 (dp)
    Gym101981I Magic Potion(最大流)
    BZOJ2588: Count on a tree 主席树
    C#添加多个Sheet表
    DataTable排序,检索,合并
    检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
    C#获取URL参数值
    JQuery爱好者们的福音 jQuery EasyUI 开源插件套装 完全替代ExtJS
    12个ajax弹出层效果
    CSS完美兼容IE6/IE7/FF的通用方法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309045.html
Copyright © 2011-2022 走看看