nebula java client api 2.0打包bug

pom中配置的shaded未生效,导致打包出来的结果


并不是maven中定义的nebula.shaded.guava.common

1 个赞

感谢你的反馈,下个版本改掉

1 个赞

找到问题了
<relocations>
<relocation>
<pattern>com.google.guava</pattern>
<shadedPattern>nebula.shaded.guava.common</shadedPattern>
</relocation>
</relocations>
修改为
<relocations>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>nebula.shaded.guava.common</shadedPattern>
</relocation>
</relocations>

麻烦fix并release一下,不然我的项目里没法使用高版本的guava

1 个赞

@dingding 丁哥来看看~

欢迎你给我们提pr哈

这里没有问题,你可以把你的问题截图出来吗

这个有问题的,guava的包没有被shade掉,你可以maven打包后的结果
unzip -l client-2.0.0-beta.jar | grep google


没有被shade掉,这样导致的问题,我的项目就只能时候你jar的包里的14版本的guava,而无法使用高版本的guava

解决jar包冲突,你可以在引用client时这样:

      <dependency>
            <groupId>com.vesoft</groupId>
            <artifactId>client</artifactId>
            <version>${parent.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

然后单独引用高版本的guava包

这样不行的,因为你们把guava的文件直接打到nebula-client.jar里面去了
image
这样导致我只要用你们的client,就只能用你们jar的guava,而exclusion只能处理简单的依赖的包

你是怎么使用的guava, 我在example中将client的guava包排掉,重新引入18.0版本的guava包,client还是可以正常使用的,而且在example中查看使用到的guava中代码对应的是18.0的。

  1. 依赖包处理方式:
        <dependency>
            <groupId>com.vesoft</groupId>
            <artifactId>client</artifactId>
            <version>${parent.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>18.0</version>
        </dependency>
  1. 代码中使用的guava 包版本

你是直接在nebula-client工程里测试的?如果是这样肯定测试不出来,你可以搭建个test项目把nebula-client引入,按你这样排包的方式你试试

看来是这样的,你可以源码编译,暂时不用maven上的jar包

shaded的修改有什么影响吗?我觉得改为把guava包改为shaded后,让api更纯净无污染。一般官方提供的api不这么打包的,不把依赖的包打进自己的包,成为一个fat jar。我猜测你们这样做的目的是为了方便spark,flink无需再添依赖jar,但从api的设计上来说不是很合理

1 个赞

感谢你的贡献,shade里面的包路径确实错的

麻烦你 CLAassistant 下


这样就可以了吧

我这边看到的还是没有

https://github.com/vesoft-inc/nebula-java/pull/235 这个pr把依赖的打包删除了,我们是没有强依赖的版本的,感谢你的反馈。

1 个赞

好的,那这个api这个多久release呢?