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

摘要:
maven解决jar包冲突1、jar包冲突原因maven中使用坐标导入jar包时会把与之相关的依赖jar包导入,而如果在导入两个及以上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包坐标在靠上位置。
maven 解决jar包冲突

1、jar包冲突原因

maven中使用坐标导入jar包时会把与之相关的依赖jar包导入(导入spring-context的jar时就会把spring的整个主体导入)maven 解决jar包冲突及简单使用第1张

,而如果在导入两个及以上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包的依赖包会优先进入项目

maven 解决jar包冲突及简单使用第2张

maven 解决jar包冲突及简单使用第3张

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

maven导入jar包的一些概念;

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

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

解决jar冲突的方法:

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

maven 解决jar包冲突及简单使用第4张

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

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

maven 解决jar包冲突及简单使用第5张

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:设置插件的参数值

免责声明:文章转载自《maven 解决jar包冲突及简单使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORA-10635: Invalid segment or tablespace type部署一个基于python语言的web发布环境下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

JRebel 6 破解版及使用方法

2.解压下载的jrebel6.0.0-crack.zip、jrebel6.0 jar包和破解文件。假设文件在D:/jrebel步骤:1中解压缩。eclipse下载jrebe插件,可以在市场上下载。2.打开eclipse的窗口首选项jrebel,打开优势选项卡,并将jar包的路径指向D:/jrebel/jrebel.jar。用CMD打开DOS窗口,输入cd/d...

layui 学习笔记(四) 复杂表头前台Excel导出

merges':mergeConf,'!cols':colConf,'!rows‘:rowConf}});}@...

layui使用layui-excel扩展导出xlsx格式文件

layui-excel扩展导出的文件可用office打开,正常显示;直接用table带的导出功能,导出的文件用office打开显示乱码。--导出表不展示--˃78910layui.config.use(['table','form','laydate','excel'],function(){11varform=layui.form;12vartable=l...

带EFI支持的GRUB2安装全记录

--引导目录#定义引导目录。默认前缀是/boot/grub2,因此我们可以直接定义/。但是,如果您将其安装在EFI系统上,则可以直接写入EFI的装载点=====2016-02-26===============在新版本的grub2中找不到引导目录参数。特别是,在安装EFI时,需要将其更改为--EFI目录,否则您将找不到EFI目录的错误。grub2-insta...

Tomcat和JDK版本的对应关系

当我们讨论Tomcat和JDK版本之间的对应关系时,我们实际上讨论了两个问题。对于第一个问题,您可以通过官方网站上的图的最后一列获得答案:因此,如果您安装Tomcat 7,则需要安装JDK1.6和更高版本才能正常启动Tomcat。对于第二个问题,我们应该明确第一个问题和第二个疑问有相同的基本答案:低版本JDK不能运行高版本JDK编译的代码。因此,如果您安装T...

C#解析Json(多方法解析Json 一)

解决方案:{“id”:“4028d80858053bed0158053ef7a50001”,“sl”:0.0,“sfyfz”:“0”,“zwjyzsbh”:“10000016000018”}1.创建新的winform控制台项目2.创建实体类测试{publicstringid{get;set;}publicstringsl{get;set;}公共字符串...