Maven学习<一>

                                                                                Maven学习


1、Maven构建生命周期

        一个典型的Maven构建生命周期是由以下几个阶段的序列组成:

 

        各个阶段描述:

 

Maven有以下三个标准的生命周期:

clean:项目清理处理

default(或build):项目部署的处理

site:项目站点文档创建的处理

 

2、Maven引入外部依赖

    

在pom.xml文件下添加以下依赖:

<dependencies> <!-- 在这里添加你的依赖 --> 

    <dependency>

        <groupId>ldapjdk</groupId> <!-- 库名称,也可以自定义 --> 

        <artifactId>ldapjdk</artifactId> <!--库名称,也可以自定义--> 

        <version>1.0</version> <!--版本号--> 

        <scope>system</scope> <!--作用域--> 

        <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath> <!--项目根目录下的lib文件夹下--> 

    </dependency> 

</dependencies>

 

3、范围/作用域

<scope>system</scope> <!--作用域--> 

  • compile (编译)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。

  • provided (已提供)

provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。

  • runtime (运行时)

 

runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。

  • test (测试)

test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

  • system (系统)

从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径。示例如下:

<project>

<dependencies>

<dependency>

<groupId>sun.jdk</groupId>

<artifactId>tools</artifactId>

<version>1.5.0</version>

<scope>system</scope>

<systemPath>${java.home}/../lib/tools.jar</systemPath>

</dependency>

...

</dependencies></project>

  • import(导入)

import仅支持在<dependencyManagement>中的类型依赖项上。它表示要在指定的POM <dependencyManagement>部分中用有效的依赖关系列表替换的依赖关系。该scope类型的依赖项实际上不会参与限制依赖项的可传递性。

4、scope的依赖传递

说明:第一列是A对B的依赖,第一行是B对C的依赖

        当B对C的依赖的scope是test或者provided,则A不依赖C。

        当B对C的依赖是scope是runtime或者compile,则A依赖C。且传递依赖的scope的规则:

            如果A对B的依赖是compile,那么A对C的依赖和B对C的依赖相同,否则和A对B的依赖保持一致。

 

maven基本命令

 

编译:mvn compile

编译测试:mvn test-compile

运行测试:mvn test

生成站点目录: mvn site

打包:mvn package

清除产生的项目:mvn clean

上传到私服:mvp deploy

显示详细错误信息:mvn -e

验证工程是否正确 资源是否可用:mvn validate

检验包是否达到标准:mvn verify

 

 

dependencyManagement使用简介

Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。只针对版本进行管理,不会实际引入jar包

举例:

    在父项目的pom.xml中配置:

因父项目中制定了版本号,那么在子项目中就不用指定版本号

如:会实际下载jar包

优点:

 

    如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号。当想升级或切换到另一个版本时,

只需要在顶层父容器里更新,而不需要逐个修改子项目;另外如果某个子项目需要另外的一个版本,只需要声明version即可。

 

注意事项:

    dependencyManagement中定义的只是依赖的声明,并不实现引入,因此子项目需要显式的声明需要用的依赖。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值