maven

2018-01-25  本文已影响0人  lwz9103

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类型及意义
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生命周期

·         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     将最终的包复制到远程的仓库,以让其它开发人员与项目共享

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仓库

  <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    出错时,打印异常栈
上一篇下一篇

猜你喜欢

热点阅读