Maven - 依赖作用域与生命周期

简介: Maven - 依赖作用域与生命周期

【1】什么是依赖?

当 A jar 包用到了 B jar 包时,A就对B产生了依赖;

在项目中以依赖的方式引入一个jar:

使用dependency标签指定被依赖的jar的坐标即可。

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.0</version> 
  <scope>test</scope>
</dependency> 

【2】依赖的范围Scope

注意上述最后一项:scope,表明依赖的范围。最常用的三个范围:test compile provided。

① compile

默认作用域。在编译和打包时都会将依赖存储进去,参与打包部署,对主程序和测试程序都有效。

② test

test范围是指测试范围有效,在编译和打包时都不会使用这个依赖。对测试程序起作用,对主程序不起作用。

③ provided

provided依赖,在编译和测试过程中有效,最后生成的war包时不会加入 例如:servlet-api,因为servlet-api tomcat服务器已经存在了,如果再打包会冲突

④ runtime

表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。image.jpeg

⑤ system

<!--引入第三方jar-Mas jar-->
<dependency>
  <groupId>com.mas</groupId>
  <artifactId>mas-sdk</artifactId>
  <version>1.0-SNAPSHOT</version>
  <scope>system</scope>
  <!--<systemPath>${project.basedir}/src/main/resources/lib/masmgc.sdk-0.0.1-SNAPSHOT.jar</systemPath>-->
  <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/masmgc.sdk-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>

当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。

指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。

【3】依赖的传递性

A 依赖 B,B 依赖 C,那么 A 是否可以使用 C 呢?

答:如果 B 依赖 C 的范围是compile,就可以依赖;否则,不可。【test provided 范围的依赖是不可以传递的!】

d8e7910053e21e45a8d4bbefad9fc1b3.jpg

【4】依赖的原则

① 路径最短者优先


② 路径相同时先声明着优先

如下图,同时依赖HelloFriend和OurFriends,但是二者所依赖的log4j不同。那么MakeFriends将会依赖 pom.xml中,先声明的那个工程的log4j。

【5】依赖的排除

如果不想使用依赖的jar,那么可以在pom.xml文件中配置:

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

6】Maven的生命周期

Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了。

Maven有三套 相互独立的生命周期,分别是:

① Clean Lifecycle在进行真正的构建之前进行一些清理工作;


② Default Lifecycle 构建的核心部门,编译、测试、打包、安装、部署等等;


③ Site Lifecycle 生成项目报告 ,站点。发布点(没用过)。


它们是相互独立的,可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。

比如,运行 mvn clean,这个clean是Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean阶段。

① Clean生命周期:

  • pre-clean 执行一些需要在clean之前完成的工作;
  • clean 移除所有上一次构建生成的文件;
  • post-clean执行一些需要在clean之后立刻完成的工作

② Site生命周期:

  • pre-site 执行一些需要在生成站点文档之前完成的工作;
  • site 生成项目的站点文档;
  • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备;
  • site-deploy 将生成的站点文档部署到特定的服务器上;

这里经常使用到的site阶段和site-deploy阶段,用于生成和发布Maven站点。

③ Default 生命周期

Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。

比较重要且常用的阶段:

validate
generate-sources
process-sources
generate-resources
process-resources 复制并处理资源文件,至目标目录,准备打包;
compile 编译项目的源代码
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources复制并处理资源文件,至目标测试目录;
test-compile 编译测试源代码
process-test-classes
test 使用合适的单位测试框架运行测试;这些测试代码不会被打包或部署。
prepare-package
package 接受编译好的代码,打包成可发布的格式,如JAR;
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其他项目依赖;
deploy 将最终的包复制到远程的仓库,以让其他开发人员与项目共享或部署到服务器上运行。

【6】生命周期与自动化构建

运行任何一个阶段的时候,它(同意声明周期)前面的所有阶段都会被运行。

例如我们运行 mvn install 的时候,代码会被 编译、测试、打包。这就是Maven为什么能够自动执行构建过程的各个环节的原因。

此外 ,Maven的插件机制是完全依赖Maven的生命周期的!


目录
相关文章
|
8月前
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
264 0
|
7月前
|
存储 Java Maven
Maven系统级别依赖:解决部署时Jar包缺失问题
以上就是关于Maven系统级别依赖解决部署时Jar包缺失问题的解答,希望对你有所帮助。在软件开发中,遇到问题并解决问题是常态,希望你能够善用这些工具,解决你遇到的问题。
405 28
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
10月前
|
缓存 架构师 Java
Maven实战进阶(01)面试官:Maven怎么解决依赖冲突?| 有几种解决方式
本文介绍了Maven的核心功能和依赖管理技巧。Maven是基于项目对象模型(POM)的构建工具,具备跨平台、标准化、自动化等特性。其三大核心功能为依赖管理、仓库管理和项目构建。依赖管理通过pom.xml文件引入第三方组件并自动下载;仓库管理涉及中央仓库、私服和本地仓库;项目构建则通过生命周期管理编译、测试、打包等流程。文章还详细讲解了依赖冲突的解决方法,包括默认规则、手工排除和版本指定等策略。
|
11月前
|
缓存 Java Maven
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法!在处理Maven项目问题时,首先检查Maven配置是否正确。接着通过“File--Invalidata Caches”清除IDEA缓存并重启。使用Maven命令`mvn dependency:purge-local-repository`和`mvn dependency:resolve`清除本地依赖缓存。最后,在Terminal中输入`mvn clean install`完成构建。
3050 1
【简单四步教你解决♥十分有效】Maven依赖报错、依赖或插件导入失败的万能解决办法
|
11月前
|
Java Maven
Maven的生命周期
Maven生命周期分为清理、构建和站点生成三部分,每部分含多个固定顺序执行的阶段。清理包括pre-clean和clean;构建涵盖validate、compile、test、package、install及deploy;站点生成则有pre-site、site、post-site与site-deploy。
272 6
|
12月前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
231 10
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
1985 3
|
Java Maven
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
408 5

推荐镜像

更多
下一篇
开通oss服务