maven

maven

  • 定义:Maven 是一个项目管理工具,它包含了一个项目对象模 型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑

  • 下载地址:https://maven.apache.org/download.cgi

  • 安装:

    1、解压

    2、配置环境变量

    • 在系统变量中新建MAVEN_HOME
      • 配置:解压maven路径,如D:apache-maven-3.6.1
    • 在Path系统变量中加入
      • %MAVEN_HOME%in
    • 更改本地仓库位置
      • 找到apache-maven-3.6.1conf下的settings.xml文件里的localRepository
       <!-- localRepository
        | The path to the local repository maven will use to store artifacts.
        |
        | Default: ${user.home}/.m2/repository
       <localRepository>此处填写本地仓库位置</localRepository>
       -->
    
    * 路径要没有空格没有中文
    

    仓库:本地仓库,远程仓库【私服】,中央仓库

  • maven标准目录结构

    src/main/java —— 存放项目的.java文件
    src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
    src/test/java——存放所有单元测试java文件,如JUnit测试类
    src/test/resources——测试资源文件
    target——项目输出位置,编译后的class文件会输出到此目录
    pom.xml——maven项目核心配置文件

    src/main/webapp——页面资源,js,css等

  • 命令

    mvn clean		//清除编译信息
    mvn compile		//编译main下文件放在target下
    mvn test		//编译main、test下的文件
    mvn package		//打包,生成target
    mvn install		//打包,生成target,在本地仓库中生成当前项目的jar包
    
  • maven的生命周期

    1. 清除项目编译信息 clean         --清理生理周期
    
    1. 编译 compile
    2. 测试 test
    3. 打包 package                  --默认生命周期
    4. 安装 install
    5. 发布 deploy
    
                                  --站点生命周期
    

  • pom.xml包含信息

    项目自身信息

    项目运行所依赖的jar包信息

    项目运行环境信息 jdk…

live Templates

<!-- https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat7-maven-plugin -->
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <port>8888</port>
    </configuration>
</plugin>
		<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <target>1.8</target>
            <source>1.8</source>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>

解决jar包冲突

maven 工程导入jar包的坐标,就必须要考虑解决jar包冲突问题
* 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包。
* 传递依赖:项目中没有直接导入的jar包可以通过项目直接依赖jar包传递到项目中。

  1. 第一声明优先原则,哪个jar包的坐标在靠上的位置,这个jar包就是先声明的,先声明的jar包坐标下的依赖包,可以优先进入项目中。

  2. 路径近者优先原则、直接依赖路径比传递依赖路径近,那么最终进入项目的jar包会是路径的直接依赖包。

  3. 直接排除【推荐使用】、当我们要排除某个jar包下的依赖包,在配置exclusions标签的时候,内部可以不写版本号。因为此时依赖包使用的版本和默认版本的jar包一样。

版本锁定

maven项目可以分父子依赖关系的。
凡是依赖别的项目后,拿到别的项目的依赖包,都属于依赖传递。
防止覆盖所依赖项目的jar包被覆盖可以使用锁住。 即使是同名jar包直接依赖,也无法覆盖
例:

<properties>
    <spring.version>5.0.2.RELEASE</spring.version>
</properties>
<!--锁定jar包版本-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        <dependency>
    <dependencies>
</dependencyManagement>

maven 工程拆分与聚合



dao 和parent 是直接依赖,作用域是complie
dao和junit是传递依赖,作用域是test
上图中-表示传递丢失,也就是不能用了。

实际开发中,如果传递依赖丢失,表示形式就是jar包的坐标导不进去。一般就是再导一次。

未完待续。。。。

原文地址:https://www.cnblogs.com/PoetryAndYou/p/11407762.html