Maven入门

Maven简介

Maven与Ant的区别

Ant: 一个项目通过不同的package区分不同模块,整个项目打包(jar,war)发布,其他项目引用时需要导入,每次修改之后需要重新打包,重新导入。
Maven: 把Ant中的一个项目中的不同的包拆分成单独的项目,通过仓库来相互引用,每次修改一个package时,不需要重新打包,自动就更新了

仓库

Maven项目的分布式是通过仓库来实现的,项目添加的某个依赖之后,会先检索本地仓库,如果本地仓库没有的话,就会检索中央仓库,中央仓库中有则下载到本地仓库
运行原理图
本地仓库: 计算机中的文件夹,在/maven/conf/setting.xml文件中可自己定义

<localRepository>D:\Maven\maven-repository</localRepository>

中央仓库: Maven管理的一个默认仓库,不需要配置,需要联网才能访问: https://repo1.maven.org/maven2/
由于是国外网站,访问较慢,可以通过配置国内镜像提高下载速度,在/maven/conf/setting.xml文件中定义镜像

 <!-- 阿里云镜像-->
  <mirrors>
	<mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>

坐标

前面在Maven与Ant的区别中讲到,在Maven项目中通过仓库来互相引用项目,如何在仓库中找到要引用的项目呢? 就需要了解坐标这个概念,坐标由下面三个部分组成:

groupId: 通常是公司名.公司网址倒写,同package命名规则

artifactId: 项目名

version: 版本号

POM(Project Object Model)

如果你认真的看完了前面讲的东西,那我们想在需要发挥一下想象,每个Maven项目(project)都是在仓库中的一个对象(object),每个项目对象(project object)都有一个坐标,通过坐标,可以在仓库中引用不同项目(project)的内容,整个的这个模型(model)就是POM。

POM的具体表现就是Maven项目中的pom.xml文件,通过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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hand</groupId>
    <artifactId>hssp-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</project>

此处定义了自己的Maven项目的坐标

项目关系

前面解释POM的时候,我们把项目想象成仓库中的一个个的对象,对象和对象之间的关系简单的可以分为以下几种。

依赖

引用其他项目的内容,只需要在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>
    <groupId>com.hand</groupId>
    <artifactId>hssp-parent</artifactId>
    <packaging>pom</packaging>
    <version>0.0.1-SNAPSHOT</version>
  <dependencies>
    <dependency>
         <groupId>com.hand</groupId>
         <artifactId>hap-db</artifactId>
         <version>0.0.1-SNAPSHOT</version>
     </dependency>
  </dependencies>
</project>

在项目开发时,如果是想引用你自己开发的本地项目,添加本地项目坐标,如果想引用开源的项目,则添加开源项目在中央仓库中的坐标即可。
不知道想引用的开源项目的坐标怎么办?
给大家提供一个查询网站:http://mvnrepository.com/

继承

在前面说Ant和Maven的区别的时候,我们把Ant中的Package对应到了Maven中的project。那么在Ant中的一个完整的项目由多个Package组成,而在Maven中一个完整的项目,则是由多个project组成的。

在构建项目模型的时候,我们会先创建一个父project,然后创建多个子project。

需要注意的是,这个地方有以下几个规范:
1,父项目必须是pom类型

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hand</groupId>
    <artifactId>hssp-parent</artifactId>
    <packaging>pom</packaging><!--项目类型-->
    <version>0.0.1-SNAPSHOT</version>
</project>

2,子项目如果还有子项目,则子项目也必须是pom类型
3,子项目中通过<parent>标签指定父项目

<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/maven-v4_0_0.xsd">
    <parent>
        <artifactId>hssp-parent</artifactId>
        <groupId>com.hand</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>hap-core</artifactId>
    <packaging>war</packaging>
    <name>hap-core</name>
    <url>http://maven.apache.org</url>
</project>

通过这种方式子项目继承了父项目,父项目中添加的依赖,子项目无需重复添加。

聚合

继承关系已经解决了大部分的项目关系之间的工作,但是有一个小问题是,从父项目的pom.xml中并不能看到有哪些子项目,如果想了解到父子项目之间这种更强的继承关系,可以使用聚合来构建项目关系。
此时父项目的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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hand</groupId>
    <artifactId>hssp-parent</artifactId>
    <packaging>pom</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <!--子项目-->
    <modules>
        <module>hap-db</module>
    </modules>
</project>

项目关系管理

dependencyManagement标签

通过项目之间的继承或者聚合关系构建项目时,我们讲到子项目可以直接引用父项目的依赖,如果我们想对依赖做更精细的控制,则需要用到<dependencyManagement>标签。
在父项目的pom.xml中定义整个项目所有的依赖:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.hand</groupId>
                <artifactId>hap-db</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
       </dependencies>
</dependencyManagement>

子项目此时不会直接引用父项目的依赖,需要在子项目中的pom.xml中引用依赖:

<dependencies>
        <dependency>
            <groupId>com.hand</groupId>
            <artifactId>hap-core-db</artifactId>
            <scope>provided</scope><!--依赖范围-->
        </dependency>
</dependencies>

此时子项目中的依赖不需要version标签,统一通过父项目来控制版本。

通过<dependencyManagement>统一控制项目依赖版本,精细的控制子项目需要用到的依赖,而不是每个子项目都加载所有父项目依赖

properties标签

而在父项目中为了统一管理依赖的版本,可以使用此标签自定义,在<dependency>中引用:

<properties>
        <spring.version>4.3.14.RELEASE</spring.version>
</properties>
<dependency>
       <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值