Maven的使用(依赖冲突)

编程

坐标(GAV

  1. groupId 公司或组织域名的倒序(仓库:包名)
  2. artifactId 项目名或模块名(仓库:项目名)
  3. version 版本号(仓库:版本号)

坐标和本地仓库有关系么?

  • 有关系的。
  • 路径:/仓库名/groupid/artifactid/version/

1.2 Maven常见命令

  • compile:编译。把项目中的Java文件编译为class文件,生成target目录
  • clean:清除。   删除target目录
  • package:打包。把target目录中的内容,打包成jarwar
  • install:安装。把生成的jar包或war包安装到本地仓库

  •    所有本地项目都可以共享该项目的方法和类

1.3 POM 标签详解

<!-- project标签:父标签,未来pom中所有的内容都要放在project标签里面-->

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <!-- 版本号 -->

  <modelVersion>4.0.0</modelVersion>

 <!--

    groupId+artifactId+version:全球唯一,坐标,简称GAV

   -->

    <!-- id:包名 -->   

  <groupId>com.czxy</groupId>

  <!-- 项目名,艺术品的名字 -->

  <artifactId>maven01</artifactId>

  <!-- 版本号,当前项目的版本号 -->

  <version>0.0.1-SNAPSHOT</version>

  <!-- 打包方式  

jarjavaSE项目

war:javaEE项目(WEB项目)

pom:父项目(多模块再讲解)-->

  <packaging>jar</packaging>

  <!-- nameurl:非必须,任意赋值 -->   

  <name>mavendemo01</name>

  <url>http://maven.apache.org</url>

  <!-- properties:属性,里面可以配置好多好多属性,这个标签不是必须的 -->  

  <properties>

    <!-- 默认配置了编码 -->

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<java.version>1.8</java.version>

<hehe.version>5.1</hehe.version>

  </properties>

  <!-- dependencies:复数,里面可以放置多个 -->

  <dependencies>

    <!-- dependency:单数,具体的jar -->

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>${hehe.version}</version>

      <scope>test</scope>

    </dependency>

  </dependencies>

  <build>

    <!-- plugins:插件-->

    <plugins>

        <!-- plugin:具体的插件 -->

        <plugin>

            <!-- 统一jdk版本的插件,强制要求添加 -->

            <groupId>org.apache.maven.plugins</groupId>

            <artifactId>maven-compiler-plugin</artifactId>

            <version>3.5.1</version>

            <configuration>

                <target>1.8</target>

                <source>1.8</source>

            </configuration>

        </plugin>

    </plugins>

  </build>

</project>

1.4 为POM添加自定义依赖

  • 本地仓库:(断网正常使用)

 

  1. 网络:

 http://www.mvnrepository.com/

本地仓导入:适用于知道项目名/jar包名/jar包下某个类名,jar包必须存在于本地仓库

网络导入:适用于jar包没在本地仓库

1.5 ​​​​​​​依赖范围

  • 不同jar包有自己的作用范围,为了更加精准地使用jar包。
  • 依赖范围:jar包作用范围

2. 依赖冲突

​​​​​​​2.1依赖关系&依赖冲突

将来项目中会因为相同jar包的不同版本导致项目崩溃。

  • Maven项目中的jar包依赖关系:

直接依赖A依赖B

项目A,直接导入了jarB

  •  间接依赖(传递性依赖)A依赖BB依赖CA间接依赖C

项目A,直接导入了jarBjarB依赖jarC,项目A间接依赖jarC

依赖冲突问题,由间接依赖导致:

  •        项目A直接导入了jarBjarC
  •        JarB 依赖了 jarD 1.1版本
  •        JarC 依赖了 jarD 2.1版本

​​​​​​​2.2 依赖冲突的调解原则:路径近者优先

  路径最近的直接依赖

​​​​​​​2.3 依赖冲突的调解原则: 第一声明优先

  • 哪个间接依赖先声明,就按谁的版本导入

​​​​​​​2.4 依赖冲突解决方案:直接排除法

建议排除叶子节点,否则容易引起连锁反应

​​​​​​​3.1 工程分层

Dao  domain   service   web    utils     commons 子项目

​​​​​​​3.2 聚合(多模块)和继承

  • 继承:maven项目中,子项目可以继承父项目的依赖和插件等配置。
  • 聚合:多个maven子项目可以组成一个完整的项目,这就是聚合

  • 继承:子工程继承父工程依赖和插件
  • 聚合:子工程之间相互依赖,形成一个整体,整体就是一个聚合工程聚合和继承通常一起使用​​​​​​​

以上是 Maven的使用(依赖冲突) 的全部内容, 来源链接: utcz.com/z/516248.html

回到顶部