美文网首页我爱编程
Maven知识点整合

Maven知识点整合

作者: Small_sheng | 来源:发表于2018-04-12 14:14 被阅读0次

maven坐标

Maven一大功能之管理项目依赖的基础就是坐标,为了能够自动化的解析每一个java构建,Maven就必须将他们唯一标示。
一组Maven坐标由以下几个元素定义的:

  • groupId
  • artifactId
  • version
  • packaging
  • classifier
    如:

<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.7</version>
<packaging>jar</packaging>

gorupId

定义当前Maven项目隶属的实际项目。springframework为一实际项目,下面有很多Maven项目,如spring-core、spring-context等。
命名与java包名类似,域名反向加实际项目名

artifactId

定义实际项目的一个Maven项目(模块),Maven项目的唯一Id。推荐的写法是用实际项目作为artifactId的前缀,不然每个项目都有一个core模块就很难区分。

version

定义Maven项目当前的版本。下面再补充Maven的版本规范,以及快照(SNAPSHOT)。

packaging

定义Maven项目的打包方式。打包方式通常与所生成构件的文件拓展名对应(不一定)。如上packaging为jar,最后生成的文件名为spring-core-4.3.7.jar。以war命名的生成一个.war文件。当不定义packaging的时候,默认为jar。
对于聚合模块跟父模块的packaging必须为pom,否则项目无法构建。

classifier

帮助定义构建输出的一些附属构件。注意,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插架帮助生成。

maven依赖

  1. 依赖配置如下:

<dependencies>
<dependency>
<groupId>com.soft.zsmart.bss.cvbs</groupId>
<artifactId>cvbs-bom</artifactId>
<version>9.0.0</version>
<type>pom</type>
<scope>import</scope>
<optional>...<optional>
<exclusions>
<exclusion>
...
</exclusion>
</exclusions>
...
</dependency>
</dependencies>

其中groupId、artifactId、version定义了依赖Maven项目的坐标,下面解释下其他元素的作用。

  • type 依赖的类型,对应项目坐标定义的packaging
  • scope 依赖的范围。
  • optional 标记依赖是否可选
  • exclusions 用来排除传递性依赖
  1. 依赖范围
    依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系,依赖类型有以下几种:
  • compile 编译依赖范围(默认依赖范围),三种classpath都有效
  • test 测试依赖范围。只对测试classpath有效
  • provided 已提供依赖范围。编译、测试有效。
  • runtime 运行时依赖范围。运行、测试有效。
  • system 系统依赖范围。与provided一样,编译、测试有效,但要通过systemPath显示指定依赖文件路径。
  • import 导入依赖范围。

SHNPSHOT(快照)

项目处于开发中,属于不稳定的版本。解决项目开发中,多模块依赖的问题。如2.0-SHNPSHOT,加上SHNPSHOT后,发布到私服中,在发布的过程中Maven会自动为构件打上时间戳,如2.0-20180324.221414-12表示2018年3月24日22点14分14秒的第12次快照。
有了时间戳,Maven就能随时找到仓库中该构件版本的最新文件。可以用-U强制让Maven检查更新 mvn clean install -U

Maven生命周期

Maven的生命周期就是为了对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成。
Maven三套生命周期:

  • clean 清理项目
  • default 构建项目
  • site 建立项目站点

插件和插件目标

Maven的核心仅仅定义了抽象的生命周期,具体的任务是由插件来完成的,插件以独立的构件形式存在。
对于插件本身,为了代码复用,它有很多的任务,如maven-dependency-plugin有十多个目标,每个目标对应一个功能,所以就有个插件目标的概念。如compiler:compiler(这是maven-compiler-plugin的compiler目标)和surefire:test(maven-surefire-plugin的test目标)。

聚合和继承

聚合(又称多模块)主要是为了方便我们构建多模块Maven项目,通过聚合的方式将多个模块的maven项目聚合到一个项目下,通过该项目构建整个项目的所有模块。
聚合模块pom定义:

<groupId>com.soft.zsmart.bss.cvbs</groupId>

<artifactId>cvbs-parent</artifactId>
<version>9.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cvBS Parent</name>
    <modules>
   <module>cvbs-order</module>
    <module>cvbs-account</module>
    <module>cvbs-offer</module>
    <module>cvbs-customer</module>
    <module>cvbs-resource</module>
    <module>cvbs-contact</module>
    <module>cvbs-price</module>
    <module>cvbs-fee</module>
    <module>cvbs-payment-impl</module>
    <module>business-framework</module>
</modules>

继承:解决多个模块的pom文件有许多相同的配置,抽取出重复的配置,这就是pom的继承。
子模块通过parent继承父模块:

<parent>
<groupId>com.ztesoft.zsmart.bss.cvbs</groupId>
<artifactId>cvbs-parent</artifactId>
<version>9.0.0-SNAPSHOT</version>
</parent>

实际项目中,为了方便,可以将一个pom即作为聚合pom,有作为父pom。

相关文章

网友评论

    本文标题:Maven知识点整合

    本文链接:https://www.haomeiwen.com/subject/dyoqcftx.html