zoukankan      html  css  js  c++  java
  • maven项目多版本互不兼容依赖冲突解决办法

    记录一次maven多module工程的依赖冲突和解决办法

    项目架构

    1. maven工程树形结构
    |---parent
        |---moduleA
        |---moduleB
        |---moduleC
    
    1. 工程描述
    • 项目是单体项目
    • moduleA和moduleB被moduleC引用
    • 项目最终是在moduleC中打包成jar文件

    冲突描述

    1. moduleA中引入了selenium-chrome-driver,而selenium依赖高版本的guava
    2. moduleC中引入了apache curatorcurator依赖的是低版本的guava,且moduleC引入了moduleA
    3. 冲突是谷歌的guava包有两个版本,且高低版本互不兼容

    冲突解决

    1. 新建一个maven项目或者module(不用继承父module),不选择原型创建
    2. 将其中一个依赖抽离出来,我这里选择抽离selenium
    3. 抽离原则是项目中使用到的api更少,api使用更集中抽离谁(我这里是抽离selenium,因为我使用到的selenium api都封装在一个类里)
    4. 删除其它不需要的目录比如test和resource目录,只留下java目录和pom.xml文件
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="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>org.xiaog</groupId>
        <artifactId>chromewebdriver</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-chrome-driver</artifactId>
                <version>3.141.59</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.1.1</version>
                    <configuration>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <relocations>
                                    <relocation>
                                        <pattern>com.google.guava</pattern>
                                        <shadedPattern>org.xiaog.guava</shadedPattern>
                                    </relocation>
                                    <relocation>
                                        <pattern>com.google.common</pattern>
                                        <shadedPattern>org.xiaog.google-common</shadedPattern>
                                    </relocation>
                                </relocations>
                                <transformers>
                                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"></transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    
    1. pom.xml中引入selenium,并使用了maven-shade-plugin插件
    2. maven-shade-plugin是核心,它能修改依赖的包名,以及将依赖下载到jar中,这样就可以使用两个不同版本的guava包了,
      因为我将com.google.guava改成了org.xiaog.guava
    3. java目录中可以不放代码,也可以放使用到依赖的代码
    4. 然后maven install
    不积跬步无以至千里
  • 相关阅读:
    VS2013中使用码云gitee建立源代码管理
    win10激活出现错误0xc004f074 解决方案
    List<string> 去重复 并且出现次数最多的排前面
    jQuery.extend(),jQuery.fn.extend() 区别
    js 获取范围内的随机数
    xslt/xpath对不存在属性的判断问题
    查询各科成绩不合格与合格人数
    微信开发之实现一键拨号及短信发送功能
    Git 常用命令
    Excel 表 导入导出
  • 原文地址:https://www.cnblogs.com/xiaogblog/p/15637710.html
Copyright © 2011-2022 走看看