• maven 解决jar包冲突及简单使用


    maven 解决jar包冲突

    1、jar包冲突原因

    maven中使用坐标导入jar包时会把与之相关的依赖jar包导入(导入spring-context的jar时就会把spring的整个主体导入)

    ,而如果在导入两个及以上jar包坐标,而多个包会依赖同一个相关jar,而这多个jar的版本不同,就会导致jar包冲突(导入spring-context的jar时导入spring-core的jar,而导入spring-beans的jar时也会导入spring-core的jar。spring-context的jar和spring-beans的jar不同时就会发生spring-core的jar的冲突)

    2、解决发案

    2.1、方式一:第一声明优先原则

    第一声明优先原则:哪个jar包坐标在靠上位置。这个jar就是先声明的,而先声明的jar包的依赖包会优先进入项目

    2.2、方式二:路径优先原则

    maven导入jar包的一些概念;

    直接依赖:项目中直接导入的jar包,就是项目的直接依赖包

    传递依赖:项目中没有直接导入,而是提供项目直接依赖jar包传递到项目中的jar

    解决jar冲突的方法:

    路径优先原则:直接依赖路径比传递依赖路径近,那么最终进入项目的jar是直接依赖,没有直接依赖才提供传递依赖导入

    2.3、方法三:直接排出法(推荐使用)

    直接排除法:当要排除某个jar下的依赖包时,配置exclusions标签,标签内部可以不写版本号。此时版本号默认和本jar包的一样。

    3、pom文件的标签

    第一部分、项目主体相关信息

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.project</groupId>
    <artifactId>module</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>test Maven Webapp</name>
    <url>http://maven.apache.org</url>
    

    modelVersion:pom文件的模型版本

    group id和artifact id,为了便于多人多模块协同开发管理,建议使用以下命名规范

    group id:com.公司名.项目名

    artifact id:功能模块名

    packaging:项目打包的后缀,war是web项目发布用的,默认为jar

    version: artifact模块的版本

    name和url:相当于项目描述,可删除

    group id + artifact id +version :项目在仓库中的坐标

    第二部分、引入jar包

    <!-- 统一管理jar包版本 -->
    <properties>
        <spring.version>5.1.6.RELEASE</spring.version>
    </properties>
    
      <!-- 锁定jar包版本 -->
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
          </dependency>
      </dependencyManagement>
    <dependencies>
    	<dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
        </dependency>
    </dependencies>
    

    这是创建项目时自动生成的,将jar引入到项目中。

    properties:统一管理jar包版本,配置完成若要修改jar包的版本,只需修改对应properties中的版本号即可

    dependencyManagement:锁定jar包版本,被锁定的jar包版本是多少,导入项目时就是多少不会产生版本冲突问题(jar包冲突)。注意:在dependencyManagement配置后还要再dependencys中配置,dependencyManagement只锁定jar,不负责导入

    dependency:引入资源jar包到本地仓库,要引入更多资源就在dependencies标签中继续增加dependency标签

    group id+artifact id+version:资源jar包在仓库中的坐标

    scope:作用范围,test指该jar包仅在maven测试时使用,发布时会忽略这个包。需要发布的jar包可以忽略这一配置

    第三部分、构建项目

    <build>
    	<finalName>test</finalName>
    	<plugins>
    		<plugin>
    			<groupId>org.apache.maven.plugins</groupId>
    			<artifactId>maven-compiler-plugin</artifactId>
    			<version>3.1</version >
    			<configuration>
    				<source>1.8</source>
    				<target>1.8</target>
    				<encoding>UTF-8</encoding>
    			</configuration>
    		</plugin>
    		<plugin>
               <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
    				<path>/</path>
    				<port>8080</port>
    			</configuration>
            </plugin>
    	</plugins>
    </build>
    

    build:项目构建时的配置

    finalName:在浏览器中的访问路径,如果将它改成helloworld,再执行maven–update,这时运行项目的访问路径是 http://localhost:8080/helloworld/ 而不是项目名的 http://localhost:8080/test

    plugins:插件,第一个插件是用来设置java版本为1.8,第二个插件是用来设置编码为utf-8

    group id+artifact id+version:插件在仓库中的坐标

    configuration:设置插件的参数值

  • 相关阅读:
    PTA 7-9 空心字母金字塔 (10分)【待优化】
    PTA 7-12 交换最小值和最大值 (15分)
    PTA 7-8 分队列 (10分)
    PTA 7-6 计算阶乘和 (10分)
    PTA 7-5 得分计算器 (20分)
    PTA 7-4 有重复的数据 (10分)
    PTA 7-1 数组元素循环右移问题 (20分)
    PTA 7-1 换硬币 (20分)
    PTA 7-6 又来一个上三角数字三角形 (10分)【待完善】
    PTA 7-5 画菱形 (10分)
  • 原文地址:https://www.cnblogs.com/wf614/p/11673813.html
Copyright © 2020-2023  润新知