maven

作者: lwz9103 | 来源:发表于2018-01-25 19:56 被阅读0次

    maven是什么

    maven是通过项目模型pom文件来编译打包项目,并在此过程通过插件中执行一些特定的目标。
    官方文档参考 https://maven.apache.org/guides/introduction/
    

    1.pom文件解析

    1.1 maven依赖(GAV参数)

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
    1.1.1 scope类型及意义
    • complie 参与编译,参与打包
    • test 测试阶段参与编译,不参与打包 ,如junit
    • provider 外部提供,不参与编译,也不参与打包,如servlet-api.jar
    • runtime 不参与编译,参与打包,如jdbc驱动
    • system 本地依赖,参与打包,参与编译
    1.1.2 传递依赖重合
    当依赖的依赖出现GA参数相同时,jar包选择参照最短路径原则和优先声明原则。
    
    1.1.3 排除依赖
    当传递依赖选取的jar包版本不对时,可以通过排除依赖调整传递依赖的优先级
    

    1.2声明依赖

      声明依赖并没有引入依赖。作用是作为父pom,对子工程的依赖版本进行管理。
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Dalston.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    1.3maven聚合和继承

    聚合pom的打包方式必须是pom
    
        <groupId>com.leaf</groupId>
        <artifactId>leaf</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
        <modules>
            <!-- 共用依赖 -->
            <module>api-common</module>
            <module>app-common</module>
            <!-- 配置中心 -->
            <module>app-config</module>
            <!-- 注册中心 -->
            <module>app-registry</module>
            <!-- 反向代理 -->
            <module>app-api-gateway</module>
            <!-- 分布式服务 -->
            <module>app-push-service</module>
            <module>app-user-service</module>
            <module>app-im-service</module>
            <!-- 监控 -->
            <!-- <module>app-monitoring</module> -->
        </modules>
    
        <parent>
            <groupId>com.leaf</groupId>
            <artifactId>leaf</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    

    2.maven插件

    2.1maven生命周期

    • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    • Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
    ·         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     将最终的包复制到远程的仓库,以让其它开发人员与项目共享
    
    • Site Lifecycle 生成项目报告,站点,发布站点。

    2.2内置插件

    maven内置插件

    2.3运行插件原理

      mvn clean install
    

    ①执行maven-clean-plugin的clean目标,clean目标绑定的生命周期是clean,阶段是clean。
    ②执行maven-install-plugin的install目标,install目标绑定的生命周期是default,阶段是install,因此在此之前,需要完成在default生命周期install这个phase之前的目标。

    2.4自定义插件

    自定义mojo,需要继承AbstactMojo
    

    3.setting.xml解析

    3.1maven仓库

    • 中央仓库

      中央仓库在国外,所以拉取速度很慢,一般设置镜像仓库,加速依赖下载
      
    • 镜像仓库

      使用阿里云镜像仓库或者nexus搭建的私人仓库
      
    • 私人仓库

      <mirrors>
        <mirror>
          <!--This sends everything else to /public -->
          <id>nexus</id>
          <mirrorOf>*</mirrorOf>
            <url>http://dev2:8081/nexus/content/groups/public</url>
          <!-- <url>http://dev2:8081/nexus/content/repositories/central/</url> -->
        </mirror>
      </mirrors>
    

    3.2 maven依赖更新策略

    snapshot为不稳定版本,在每次maven构建时,都要重新拉取,设置updatePolicy

            <repository>
              <id>internal</id>
              <url>http://internal</url>
              <releases>
                <enabled>true</enabled></releases>
              <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
              </snapshots>
            </repository>
    

    4. maven指令常见参数

    -U    更新snapshot版本的依赖
    -e    出错时,打印异常栈

    相关文章

      网友评论

          本文标题:maven

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