转载

Maven基本知识

  • 2大功能

    • 管理依赖:依赖指的就是jar包
    • 项目构建:它是一个项目管理、构建工具
  • 常用命令

    • mvn compile 编译主目录的文件
    • mvn clean 清除已经编译好的target目录中的文件(class文件)
    • mvn test 编译并运行test目录的代码
    • mvn package 打包
    • mvn install 把项目发布到本地仓库
    • tomcat: run 一键启动

依赖管理

  1. 依赖范围,scope

    • compile: 默认编译依赖范围。对于编译、测试、运行三种classpath都有效
    • test:测试依赖范围。
    • provided:已提供依赖范围。对于编译、测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
    • runtime:运行时提供。例如:jdbc驱动
  2. 依赖传递

    • 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
    • 当第二直接依赖的范围是test的时候,依赖不会得以传递。
    • 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
    • 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
  3. 可选依赖

    Optional标签标示该依赖是否可选,默认是false。如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。

    <dependency>
       <groupId>com.itheima.maven</groupId>
       <artifactId>MavenFirst</artifactId>
       <version>0.0.1-SNAPSHOT</version>
       <optional>true</optional>
     </dependency>
  4. 排除依赖,Exclusions标签可以排除依赖

    <!-- 第一直接依赖 -->
     <dependency>
    <groupId>com.itheima.maven</groupId>
    <artifactId>MavenSecond</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    
    <exclusions>
      <exclusion>
        <groupId>com.itheima.maven</groupId>
        <artifactId>MavenFirst</artifactId>
      </exclusion>
    </exclusions>

生命周期

生命周期可以理解为项目构建的步骤集合,maven有三个生命周期:clean生命周期、default生命周期、site生命周期

生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段。

  1. Clean生命周期

    pre-clean 执行一些需要在clean之前完成的工作

    clean 移除所有上一次构建生成的文件

    post-clean 执行一些需要在clean之后立刻完成的工作

  2. Default生命周期(重点)

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

  3. Site生命周期

    pre-site 执行一些需要在生成站点文档之前完成的工作

    site 生成项目的站点文档

    post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

    site-deploy 将生成的站点文档部署到特定的服务器上

Maven插件

<build>
     <plugins>
       <!-- 编译插件,指定编译用的的jdk版本 -->
       <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
          </configuration>
       </plugin>
     </plugins>
  </build>

继承

父工程抽取版本号:<properties>的子标签可以任意指定

<properties>
     <junit.version>4.9</junit.version>
  </properties>
 
  <dependencyManagement>
     <dependencies>
       <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
       </dependency>
     </dependencies>
  </dependencyManagement>

在工程中使用父工程管理的版本号时不需要指定version

<dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
  </dependency>
原文  https://segmentfault.com/a/1190000022441622
正文到此结束
Loading...