Maven核心概念学习

①POM

    POM  含义:Project Object Model 项目对象模型 pom.xml文件是一个Maven项目的核心配置文件,该配置文件包含了大部分的构建一个项目所需要的信息。可以说学习 Maven 就是学习 pom.xml 文件中的配置。


<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> 
  <!-- 群组ID: 公司域名反写 -->
  <groupId>com.kiwi</groupId>
  <!-- 项目ID: 一个公司只有一个域名,但是可以有多个项目 -->
  <artifactId>One</artifactId>
  <!-- 版本号: 用于描述开发过程的阶段性标识-->
  <version>0.0.1-SNAPSHOT</version>
 
  <!-- 默认字符集 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
 
 <!-- 依赖管理 -->
  <dependencies>
        <!-- 具体的依赖 -->
       <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.9</version>
              <scope>test</scope>
        </dependency>
  </dependencies>
</project>


②约定的目录结构


  • src/main/java: 存放项目的java文件。
  • src/main/resources: 存放项目的资源文件,如spring,hibernate的配置文件。
  • src/test/java: 存放所有的测试的java文件。
  • src/test/resources: 存放测试用的资源文件。
  • target: 项目输出位置。
  • pom.xml: 配置文件

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

③坐标

    使用如下三个向量在 Maven 的仓库中唯一的确定一个 Maven 工程。

     [1]groupid:公司或组织的域名倒序+当前项目名称
     [2]artifactId:当前项目的模块名称
     [3]version:当前模块的版本

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

  •         [1]将 gav 三个向量连起来
  •             com.atguigu.maven+Hello+0.0.1-SNAPSHOT
  •         [2]以连起来的字符串作为目录结构到仓库中查找
  •             com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar
  •         ※注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install

④依赖管理

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

  1.依赖的目的是什么

    当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。那么如何在项目中以依赖的方式引入一个我们需要的 jar 包呢?

    即 A—需要—》B中的类,则A—依赖—》B

  使用 dependency 标签指定被依赖 jar 包的坐标就可以了。

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


dependencies和dependency


  前者包含后者,并且,Maven的一个重要作用就是统一管理jar包,为了一个项目可以build或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。


  2.依赖的范围

    大家注意到上面的依赖信息中除了目标 jar 包的坐标还有一个 scope 设置,这是依赖的范围。依赖的范

围有几个可选值,我们用得到的是:compile、test、provided 三个。

    compile: 对主程序有效    对测试程序    有效参与打包

    test: 对主程序无效    对测试程序有效    不参与打包    典型:junit(主程序看不见test类型依赖)


    provided:对主程序有效    对测试程序有效    不参与打包    不参与部署


    也就是说定义不同依赖范围,那么在不同的运行环境下就会显示不同的依赖结果,如junit的scope是test,那么主程序中就无法依赖这个junit,类似于一个权限修饰符。

    而provided 比较特殊,在开发阶段是由Maven提供依赖类库,但是在项目部署时,就是由Severlt容器提供


  3.依赖的传递性

    A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不
可用。

A—需要—》B中的类,则B—依赖compile—》C

A—需要—》B中的类,则B—依赖test—》C

A—需要—》B中的类,则B—依赖provided—》C

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

  <dependency>
        <groupId>com.hello.maven</groupId>
        <artifactId>Hello</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>jar</type>
        <scope>compile</scope>
   <exclusions>
     <exclusion>
        <groupId>org.apche.struts</groupId>
        <artifactId>struts2-core</artifactId>
     </exclusion> >
   </exclusions>
</dependency>
  5.统一管理所依赖 jar 包的版本
     对同一个框架的一组 jar 包最好使用相同的版本。为了方便升级框架,可以将 jar 包的版本信息统一提取出来
          统一声明版本号,利用资源标签         <properties>

                       <properties>
                             <自定义名称>4.1.1.RELEASE</自定义名称>
                       </properties>
             引用前面声明的版本号

                       <dependencies>
                                    <dependency>
                                             <groupId>org.springframework</groupId>
                                             <artifactId>spring-core</artifactId>
                                      <version> ${自定义名称}</version>

                                    </dependency>

                       </dependencies>

或者


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


⑤仓库管理

    本地仓库:为当前本机电脑上的所有 Maven 工程服务。

    远程仓库:
                (1)私服:架设在当前局域网环境下,为当前局域网范围内的所有 Maven 工程服务。

                (2)中央仓库:架设在 Internet 上,为全世界所有 Maven 工程服务。
                (3)中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力

   

    官方下载的本地仓库的配置在"%MAVEN_HOME%\conf\settings.xml"里面,找一下"localRepository"就可以了;MyEclipse默认的本地仓库的地址在"{user.home}/.m2/repository"路径下,同样找一下"localRepository"就可以找到MyEclipse默认的本地仓库了。


 
 本地仓库和远程仓库是这样的,Maven工程首先会从本地仓库中获取jar包,当无法获取指定jar包时,本地仓库会从远程仓库(中央仓库)中下载jar包,并放入本地仓库以备将来使用。

⑥生命周期
⑦插件和目标
⑧继承
⑨聚合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜马拉雅以南

奶茶,干杯?!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值