首先:

项目中使用到了phoenix,引入的依赖如下,此依赖中包含Guava27.0.版本jar依赖。

<dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-core</artifactId>
            <version>5.1.3</version>
</dependency>

项目中后期还使用到了clickhouse.引入的依赖如下,此依赖中包含Guava19.0版本jar依赖。

<dependency>
  <groupId>ru.yandex.clickhouse</groupId>
  <artifactId>clickhouse-jdbc</artifactId>
  <version>0.2.4</version>
</dependency>

由于:

guava版本在16.0以后,不向后兼容。用Guava19.0版本,则会少了Guava27.0版本中的某些类,反之就会少Guava19.0版本中的某些类。phoenix和clickhouse总有一个会报错

解决:

新建maven项目,在项目中引入Phoenix依赖包(Guava27.0),使用maven-shade-plugin打包,给guava27.0包中的核心类com.google.common映射别名,然后将打包好的jar包加入到maven仓库。在项目中针对查询Phoenix导入我们自己加入的包(内部实际使用guava27.0),针对ClickHouse在项目中正常使用guava19版本即可。

具体如下:

1.Idea创建项目phoenix-core-guava-shaded

2.项目中引入如下依赖


<dependencies>
  <dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>5.1.3</version>
    <exclusions>
      <exclusion>
        <artifactId>httpclient</artifactId>
        <groupId>org.apache.flink.httpcomponents</groupId>
      </exclusion>
      <exclusion>
        <artifactId>httpcore</artifactId>
        <groupId>org.apache.flink.httpcomponents</groupId>
      </exclusion>
      <exclusion>
        <artifactId>commons-httpclient</artifactId>
        <groupId>commons-httpclient</groupId>
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>

3.在pom.xml中加入maven-shade-plugins并配置

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <relocations>
                                <relocation>
                                    <pattern>com.google.common</pattern>
                                    <shadedPattern>com.selfjarconflict.bigdata.phoenix.common</shadedPattern>
                                </relocation>
                            </relocations>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"/>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- deploy插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <updateReleaseInfo>true</updateReleaseInfo>
                </configuration>
            </plugin>
        </plugins>
    </build>

4.使用maven打包

5.在jar所在目录使用cmd打开命令行,执行如下代码

mvn install:install-file -DgroupId=com.selfjarconflict.bigdata.phoenix -DartifactId=phoenix-core-guava-shaded -Dversion=1.0 -Dfile=D:\find_work\studyNote\bigdata\two\00_project\phoenixcoreguavashaded\target\phoenix-core-guava-shaded-1.0.jar -Dpackaging=jar

其中groupId,aetfactId,version都是一一对应的,file文件指的jar包的绝对路径,
回车,jar包就会到maven设置的仓库地址中去

查看maven仓库中加入的依赖包

6.在正常使用项目中引入该jar包

Phoenix使用到的Guava27.0包引入此依赖即可,但是需要将Phoenix-core包exclusion排除,否则又会引入Guava27.0包导致冲突。针对使用到Guava19.0依赖,直接引入即可,即可解决冲突。引入如下:

<dependency>
  <groupId>ru.yandex.clickhouse</groupId>
  <artifactId>clickhouse-jdbc</artifactId>
  <version>0.2.4</version>
</dependency>
<!-- 解决phoenix中guava包冲突自己改写定义的jar包 -->
<dependency>
  <groupId>com.selfjarconflict.bigdata.phoenix</groupId>
  <artifactId>phoenix-core-guava-shaded</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>org.apache.phoenix</groupId>
      <artifactId>phoenix-core</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐