美文网首页我爱编程
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