You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@dubbo.apache.org by Tien Dat PHAN <tp...@gmail.com> on 2019/10/24 16:31:08 UTC
Duplicate class on dubbo-common
Dear experts,
We have recently noticed the warning regarding the duplicate class on /org/apache/dubbo/common/Version.class between org.apache.dubbo:dubbo and org.apache.dubbo:dubbo-common.
As many topics have been suggested to exclude the dubbo-common.
We have tried to exclude the dubbo-common library as the suggestion with the help of Maven:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>com.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-kryo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>com.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
</exclusions>
</dependency>
Anyway, the warning persists and the mvn dependency:tree still shows dubbo-common is included in the dependency tree.
Even though this is not stopping our application to run, but we would like to know if it is possible to fix it for good.
Best regards
Tien Dat PHAN
Re: Duplicate class on dubbo-common
Posted by Jason Joo <hb...@163.com>.
Hi, tien
I think I have understood what you're talking about.
The issue occurred because one of your third-party dependencies DECLAREs that it requires `dubbo-serialization-kryo`. right?
The best solution is that you can just add `<exclude />` lines in the section of that third-party dependency for `dubbo-serialization-kryo` and everything will go fine.
Still `dubbo` is combined of many smaller dubbo modules including `dubbo-serialization` as shown below:
==========================
jason-mbp:wav hblzxsj$ unzip -Z dubbo-serialization-kryo-2.7.4.jar |awk '{print $9}' |grep class$
org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
=======================
So when you don't have a `dubbo` dependency in your project you need `dubbo-serialization-kryo` but if so just ignore it.
best regards,
Jason
> On Oct 25, 2019, at 23:11, Tien Dat PHAN <tp...@gmail.com> wrote:
>
> Hi Jason,
>
> I really appreciate your attention on this issue.
>
> As we have described, the duplicate class error is popped up when we declare both dependency on dubbo and dubbo-serialization-kryo (as we need third-party dependencies required by dubbo-serialization-kryo):
> <dependency>
> <groupId>org.apache.dubbo</groupId>
> <artifactId>dubbo</artifactId>
> <version>${dubbo.version}</version>
> <exclusions>
> <exclusion>
> <groupId>com.apache.dubbo</groupId>
> <artifactId>dubbo-common</artifactId>
> </exclusion>
> </exclusions>
> </dependency>
> <dependency>
> <groupId>org.apache.dubbo</groupId>
> <artifactId>dubbo-serialization-kryo</artifactId>
> <version>${dubbo.version}</version>
> <exclusions>
> <exclusion>
> <groupId>com.apache.dubbo</groupId>
> <artifactId>dubbo-common</artifactId>
> </exclusion>
> </exclusions>
> </dependency>
>
> Of course, we can still avoid the "Duplicate class" ERROR by declaring dependency only on dubbo, plus the kryo library that dubbo-serialization-kryo uses:
> <dependency>
> <groupId>org.apache.dubbo</groupId>
> <artifactId>dubbo</artifactId>
> <version>${dubbo.version}</version>
> </dependency>
> <dependency>
> <groupId>com.esotericsoftware</groupId>
> <artifactId>kryo</artifactId>
> <version>4.0.1</version>
> </dependency>
>
> If you really need a project for quicker reproduction, I can make a github project. The content will most likely just these poms.
>
> Best
> Tien Dat
>
> On 2019/10/25 13:13:29, Jason Joo <hb...@163.com> wrote:
>> Hi, tien,
>>
>> Err, I don't think the error message of duplicated class is a normal thing, could you upload a sample to reproduce it?
>>
>> best regards,
>>
>> Jason
>>
>>> On Oct 25, 2019, at 19:15, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>
>>> Hi Jason,
>>>
>>> Thanks for asking. Everything is working if we add this directly.
>>> And we understand your concern about having conflicting dependencies with our application dependencies.
>>> And this is at the end a tradeoff between memory footprint optimization vs software project management efficiency.
>>>
>>> Our application does not need specifically com.esotericsoftware.kryo. This is needed only by org.apache.dubbo:dubbo-serialization-kryo. And we really don't like the fact that we need to repeat the dependency declaration on this library, which is already defined by org.apache.dubbo:dubbo-serialization-kryo, but got ignored. Moreover, if we upgrade Dubbo version, we have to go check the new version of com.esotericsoftware.kryo used by the new Dubbo, and update it accordingly.
>>>
>>> At the end, I think we will accept the ERROR message on "Duplicate class". As their is no win-win solution for this case.
>>>
>>> Best regards
>>> Dat
>>>
>>> On 2019/10/25 10:47:32, Jason Joo <hb...@163.com> wrote:
>>>> Tien,
>>>>
>>>> It makes sense because it (and others like this) is an optional extension / support / function. We should decide to introduce the extra dependencies it requires when we enable it in configuration compared to the default.
>>>> Another similar thing is that which driver you should introduce among zookeeper / nacos / redis / others depends which implementation of registry you want to use and actually config.
>>>>
>>>> In most cases the version may not matter so much but you'd better to pick it carefully to match just or newer to the version dubbo uses by default.
>>>>
>>>> So is everything going well now? After introducing the necessary dependencies?
>>>>
>>>> best regards,
>>>>
>>>> Jason
>>>>
>>>>> On Oct 25, 2019, at 18:19, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>>>
>>>>> Hi Jason,
>>>>>
>>>>> The org.apache.dubbo:dubbo-serialization-kryo, for example, needs com.esotericsoftware.kryo.Kryo for Kryo serialization.
>>>>>
>>>>> org.apache.dubbo:dubbo-serialization-kryo itself has it declared in pom.xml
>>>>>
>>>>> But you do "unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo", you don't see it included.
>>>>> And we have to declare it directly in our application pom.xml
>>>>> We believe that this is not relevant, since we have to update the version of com.esotericsoftware.kryo according to org.apache.dubbo:dubbo-serialization-kryo.
>>>>>
>>>>> Best
>>>>> Dat
>>>>>
>>>>> On 2019/10/25 08:17:18, Jason Joo <hb...@163.com> wrote:
>>>>>> Hi, tien
>>>>>>
>>>>>> `dubbo` is a "fat" jar which includes all the classes you may possibly use.
>>>>>>
>>>>>> You can confirm it using "unzip" as shown below:
>>>>>>
>>>>>>
>>>>>> bogon:2.7.3 hblzxsj$ unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo
>>>>>> org/apache/dubbo/common/serialize/kryo/
>>>>>> org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
>>>>>> org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
>>>>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/
>>>>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.properties
>>>>>> org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
>>>>>> org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
>>>>>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
>>>>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.xml
>>>>>>
>>>>>>
>>>>>>
>>>>>> best regards,
>>>>>>
>>>>>> Jason
>>>>>>
>>>>>>> On Oct 25, 2019, at 16:06, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>>>>>
>>>>>>> Hi Jason,
>>>>>>>
>>>>>>> We found that is not enough.
>>>>>>> As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
>>>>>>> All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
>>>>>>> This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
>>>>>>>
>>>>>>> Best
>>>>>>> Dat
>>>>>>>
>>>>>>> On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
>>>>>>>> Hi, tien
>>>>>>>>
>>>>>>>> There is a problem in your `dependencies` section.
>>>>>>>> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
>>>>>>>>
>>>>>>>> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
>>>>>>>>
>>>>>>>> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
>>>>>>>>
>>>>>>>> So generally we just introduce `dubbo` instead. That's already enough.
>>>>>>>>
>>>>>>>> best regards,
>>>>>>>>
>>>>>>>> Jason
>>>>>>>>
>>>>>>>>> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>> the dubbo-common library as the suggestion with the help o
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
Re: Duplicate class on dubbo-common
Posted by Tien Dat PHAN <tp...@gmail.com>.
Hi Jason,
I really appreciate your attention on this issue.
As we have described, the duplicate class error is popped up when we declare both dependency on dubbo and dubbo-serialization-kryo (as we need third-party dependencies required by dubbo-serialization-kryo):
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>com.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-serialization-kryo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>com.apache.dubbo</groupId>
<artifactId>dubbo-common</artifactId>
</exclusion>
</exclusions>
</dependency>
Of course, we can still avoid the "Duplicate class" ERROR by declaring dependency only on dubbo, plus the kryo library that dubbo-serialization-kryo uses:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>4.0.1</version>
</dependency>
If you really need a project for quicker reproduction, I can make a github project. The content will most likely just these poms.
Best
Tien Dat
On 2019/10/25 13:13:29, Jason Joo <hb...@163.com> wrote:
> Hi, tien,
>
> Err, I don't think the error message of duplicated class is a normal thing, could you upload a sample to reproduce it?
>
> best regards,
>
> Jason
>
> > On Oct 25, 2019, at 19:15, Tien Dat PHAN <tp...@gmail.com> wrote:
> >
> > Hi Jason,
> >
> > Thanks for asking. Everything is working if we add this directly.
> > And we understand your concern about having conflicting dependencies with our application dependencies.
> > And this is at the end a tradeoff between memory footprint optimization vs software project management efficiency.
> >
> > Our application does not need specifically com.esotericsoftware.kryo. This is needed only by org.apache.dubbo:dubbo-serialization-kryo. And we really don't like the fact that we need to repeat the dependency declaration on this library, which is already defined by org.apache.dubbo:dubbo-serialization-kryo, but got ignored. Moreover, if we upgrade Dubbo version, we have to go check the new version of com.esotericsoftware.kryo used by the new Dubbo, and update it accordingly.
> >
> > At the end, I think we will accept the ERROR message on "Duplicate class". As their is no win-win solution for this case.
> >
> > Best regards
> > Dat
> >
> > On 2019/10/25 10:47:32, Jason Joo <hb...@163.com> wrote:
> >> Tien,
> >>
> >> It makes sense because it (and others like this) is an optional extension / support / function. We should decide to introduce the extra dependencies it requires when we enable it in configuration compared to the default.
> >> Another similar thing is that which driver you should introduce among zookeeper / nacos / redis / others depends which implementation of registry you want to use and actually config.
> >>
> >> In most cases the version may not matter so much but you'd better to pick it carefully to match just or newer to the version dubbo uses by default.
> >>
> >> So is everything going well now? After introducing the necessary dependencies?
> >>
> >> best regards,
> >>
> >> Jason
> >>
> >>> On Oct 25, 2019, at 18:19, Tien Dat PHAN <tp...@gmail.com> wrote:
> >>>
> >>> Hi Jason,
> >>>
> >>> The org.apache.dubbo:dubbo-serialization-kryo, for example, needs com.esotericsoftware.kryo.Kryo for Kryo serialization.
> >>>
> >>> org.apache.dubbo:dubbo-serialization-kryo itself has it declared in pom.xml
> >>>
> >>> But you do "unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo", you don't see it included.
> >>> And we have to declare it directly in our application pom.xml
> >>> We believe that this is not relevant, since we have to update the version of com.esotericsoftware.kryo according to org.apache.dubbo:dubbo-serialization-kryo.
> >>>
> >>> Best
> >>> Dat
> >>>
> >>> On 2019/10/25 08:17:18, Jason Joo <hb...@163.com> wrote:
> >>>> Hi, tien
> >>>>
> >>>> `dubbo` is a "fat" jar which includes all the classes you may possibly use.
> >>>>
> >>>> You can confirm it using "unzip" as shown below:
> >>>>
> >>>>
> >>>> bogon:2.7.3 hblzxsj$ unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo
> >>>> org/apache/dubbo/common/serialize/kryo/
> >>>> org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
> >>>> org/apache/dubbo/common/serialize/kryo/utils/
> >>>> org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
> >>>> org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
> >>>> org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
> >>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/
> >>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.properties
> >>>> org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
> >>>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
> >>>> org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
> >>>> org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
> >>>> org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
> >>>> org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
> >>>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
> >>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.xml
> >>>>
> >>>>
> >>>>
> >>>> best regards,
> >>>>
> >>>> Jason
> >>>>
> >>>>> On Oct 25, 2019, at 16:06, Tien Dat PHAN <tp...@gmail.com> wrote:
> >>>>>
> >>>>> Hi Jason,
> >>>>>
> >>>>> We found that is not enough.
> >>>>> As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
> >>>>> All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
> >>>>> This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
> >>>>>
> >>>>> Best
> >>>>> Dat
> >>>>>
> >>>>> On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
> >>>>>> Hi, tien
> >>>>>>
> >>>>>> There is a problem in your `dependencies` section.
> >>>>>> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
> >>>>>>
> >>>>>> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
> >>>>>>
> >>>>>> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
> >>>>>>
> >>>>>> So generally we just introduce `dubbo` instead. That's already enough.
> >>>>>>
> >>>>>> best regards,
> >>>>>>
> >>>>>> Jason
> >>>>>>
> >>>>>>> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
> >>>>>>>
> >>>>>>> the dubbo-common library as the suggestion with the help o
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>
> >>
>
>
Re: Duplicate class on dubbo-common
Posted by Jason Joo <hb...@163.com>.
Hi, tien,
Err, I don't think the error message of duplicated class is a normal thing, could you upload a sample to reproduce it?
best regards,
Jason
> On Oct 25, 2019, at 19:15, Tien Dat PHAN <tp...@gmail.com> wrote:
>
> Hi Jason,
>
> Thanks for asking. Everything is working if we add this directly.
> And we understand your concern about having conflicting dependencies with our application dependencies.
> And this is at the end a tradeoff between memory footprint optimization vs software project management efficiency.
>
> Our application does not need specifically com.esotericsoftware.kryo. This is needed only by org.apache.dubbo:dubbo-serialization-kryo. And we really don't like the fact that we need to repeat the dependency declaration on this library, which is already defined by org.apache.dubbo:dubbo-serialization-kryo, but got ignored. Moreover, if we upgrade Dubbo version, we have to go check the new version of com.esotericsoftware.kryo used by the new Dubbo, and update it accordingly.
>
> At the end, I think we will accept the ERROR message on "Duplicate class". As their is no win-win solution for this case.
>
> Best regards
> Dat
>
> On 2019/10/25 10:47:32, Jason Joo <hb...@163.com> wrote:
>> Tien,
>>
>> It makes sense because it (and others like this) is an optional extension / support / function. We should decide to introduce the extra dependencies it requires when we enable it in configuration compared to the default.
>> Another similar thing is that which driver you should introduce among zookeeper / nacos / redis / others depends which implementation of registry you want to use and actually config.
>>
>> In most cases the version may not matter so much but you'd better to pick it carefully to match just or newer to the version dubbo uses by default.
>>
>> So is everything going well now? After introducing the necessary dependencies?
>>
>> best regards,
>>
>> Jason
>>
>>> On Oct 25, 2019, at 18:19, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>
>>> Hi Jason,
>>>
>>> The org.apache.dubbo:dubbo-serialization-kryo, for example, needs com.esotericsoftware.kryo.Kryo for Kryo serialization.
>>>
>>> org.apache.dubbo:dubbo-serialization-kryo itself has it declared in pom.xml
>>>
>>> But you do "unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo", you don't see it included.
>>> And we have to declare it directly in our application pom.xml
>>> We believe that this is not relevant, since we have to update the version of com.esotericsoftware.kryo according to org.apache.dubbo:dubbo-serialization-kryo.
>>>
>>> Best
>>> Dat
>>>
>>> On 2019/10/25 08:17:18, Jason Joo <hb...@163.com> wrote:
>>>> Hi, tien
>>>>
>>>> `dubbo` is a "fat" jar which includes all the classes you may possibly use.
>>>>
>>>> You can confirm it using "unzip" as shown below:
>>>>
>>>>
>>>> bogon:2.7.3 hblzxsj$ unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo
>>>> org/apache/dubbo/common/serialize/kryo/
>>>> org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
>>>> org/apache/dubbo/common/serialize/kryo/utils/
>>>> org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
>>>> org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
>>>> org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
>>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/
>>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.properties
>>>> org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
>>>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
>>>> org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
>>>> org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
>>>> org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
>>>> org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
>>>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
>>>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.xml
>>>>
>>>>
>>>>
>>>> best regards,
>>>>
>>>> Jason
>>>>
>>>>> On Oct 25, 2019, at 16:06, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>>>
>>>>> Hi Jason,
>>>>>
>>>>> We found that is not enough.
>>>>> As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
>>>>> All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
>>>>> This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
>>>>>
>>>>> Best
>>>>> Dat
>>>>>
>>>>> On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
>>>>>> Hi, tien
>>>>>>
>>>>>> There is a problem in your `dependencies` section.
>>>>>> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
>>>>>>
>>>>>> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
>>>>>>
>>>>>> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
>>>>>>
>>>>>> So generally we just introduce `dubbo` instead. That's already enough.
>>>>>>
>>>>>> best regards,
>>>>>>
>>>>>> Jason
>>>>>>
>>>>>>> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>>>>>
>>>>>>> the dubbo-common library as the suggestion with the help o
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
Re: Duplicate class on dubbo-common
Posted by Tien Dat PHAN <tp...@gmail.com>.
Hi Jason,
Thanks for asking. Everything is working if we add this directly.
And we understand your concern about having conflicting dependencies with our application dependencies.
And this is at the end a tradeoff between memory footprint optimization vs software project management efficiency.
Our application does not need specifically com.esotericsoftware.kryo. This is needed only by org.apache.dubbo:dubbo-serialization-kryo. And we really don't like the fact that we need to repeat the dependency declaration on this library, which is already defined by org.apache.dubbo:dubbo-serialization-kryo, but got ignored. Moreover, if we upgrade Dubbo version, we have to go check the new version of com.esotericsoftware.kryo used by the new Dubbo, and update it accordingly.
At the end, I think we will accept the ERROR message on "Duplicate class". As their is no win-win solution for this case.
Best regards
Dat
On 2019/10/25 10:47:32, Jason Joo <hb...@163.com> wrote:
> Tien,
>
> It makes sense because it (and others like this) is an optional extension / support / function. We should decide to introduce the extra dependencies it requires when we enable it in configuration compared to the default.
> Another similar thing is that which driver you should introduce among zookeeper / nacos / redis / others depends which implementation of registry you want to use and actually config.
>
> In most cases the version may not matter so much but you'd better to pick it carefully to match just or newer to the version dubbo uses by default.
>
> So is everything going well now? After introducing the necessary dependencies?
>
> best regards,
>
> Jason
>
> > On Oct 25, 2019, at 18:19, Tien Dat PHAN <tp...@gmail.com> wrote:
> >
> > Hi Jason,
> >
> > The org.apache.dubbo:dubbo-serialization-kryo, for example, needs com.esotericsoftware.kryo.Kryo for Kryo serialization.
> >
> > org.apache.dubbo:dubbo-serialization-kryo itself has it declared in pom.xml
> >
> > But you do "unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo", you don't see it included.
> > And we have to declare it directly in our application pom.xml
> > We believe that this is not relevant, since we have to update the version of com.esotericsoftware.kryo according to org.apache.dubbo:dubbo-serialization-kryo.
> >
> > Best
> > Dat
> >
> > On 2019/10/25 08:17:18, Jason Joo <hb...@163.com> wrote:
> >> Hi, tien
> >>
> >> `dubbo` is a "fat" jar which includes all the classes you may possibly use.
> >>
> >> You can confirm it using "unzip" as shown below:
> >>
> >>
> >> bogon:2.7.3 hblzxsj$ unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo
> >> org/apache/dubbo/common/serialize/kryo/
> >> org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
> >> org/apache/dubbo/common/serialize/kryo/utils/
> >> org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
> >> org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
> >> org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
> >> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/
> >> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.properties
> >> org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
> >> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
> >> org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
> >> org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
> >> org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
> >> org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
> >> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
> >> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.xml
> >>
> >>
> >>
> >> best regards,
> >>
> >> Jason
> >>
> >>> On Oct 25, 2019, at 16:06, Tien Dat PHAN <tp...@gmail.com> wrote:
> >>>
> >>> Hi Jason,
> >>>
> >>> We found that is not enough.
> >>> As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
> >>> All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
> >>> This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
> >>>
> >>> Best
> >>> Dat
> >>>
> >>> On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
> >>>> Hi, tien
> >>>>
> >>>> There is a problem in your `dependencies` section.
> >>>> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
> >>>>
> >>>> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
> >>>>
> >>>> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
> >>>>
> >>>> So generally we just introduce `dubbo` instead. That's already enough.
> >>>>
> >>>> best regards,
> >>>>
> >>>> Jason
> >>>>
> >>>>> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
> >>>>>
> >>>>> the dubbo-common library as the suggestion with the help o
> >>>>
> >>>>
> >>
> >>
>
>
Re: Duplicate class on dubbo-common
Posted by Jason Joo <hb...@163.com>.
Tien,
It makes sense because it (and others like this) is an optional extension / support / function. We should decide to introduce the extra dependencies it requires when we enable it in configuration compared to the default.
Another similar thing is that which driver you should introduce among zookeeper / nacos / redis / others depends which implementation of registry you want to use and actually config.
In most cases the version may not matter so much but you'd better to pick it carefully to match just or newer to the version dubbo uses by default.
So is everything going well now? After introducing the necessary dependencies?
best regards,
Jason
> On Oct 25, 2019, at 18:19, Tien Dat PHAN <tp...@gmail.com> wrote:
>
> Hi Jason,
>
> The org.apache.dubbo:dubbo-serialization-kryo, for example, needs com.esotericsoftware.kryo.Kryo for Kryo serialization.
>
> org.apache.dubbo:dubbo-serialization-kryo itself has it declared in pom.xml
>
> But you do "unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo", you don't see it included.
> And we have to declare it directly in our application pom.xml
> We believe that this is not relevant, since we have to update the version of com.esotericsoftware.kryo according to org.apache.dubbo:dubbo-serialization-kryo.
>
> Best
> Dat
>
> On 2019/10/25 08:17:18, Jason Joo <hb...@163.com> wrote:
>> Hi, tien
>>
>> `dubbo` is a "fat" jar which includes all the classes you may possibly use.
>>
>> You can confirm it using "unzip" as shown below:
>>
>>
>> bogon:2.7.3 hblzxsj$ unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo
>> org/apache/dubbo/common/serialize/kryo/
>> org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
>> org/apache/dubbo/common/serialize/kryo/utils/
>> org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
>> org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
>> org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/
>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.properties
>> org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
>> org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
>> org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
>> org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
>> org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
>> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
>> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.xml
>>
>>
>>
>> best regards,
>>
>> Jason
>>
>>> On Oct 25, 2019, at 16:06, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>
>>> Hi Jason,
>>>
>>> We found that is not enough.
>>> As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
>>> All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
>>> This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
>>>
>>> Best
>>> Dat
>>>
>>> On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
>>>> Hi, tien
>>>>
>>>> There is a problem in your `dependencies` section.
>>>> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
>>>>
>>>> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
>>>>
>>>> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
>>>>
>>>> So generally we just introduce `dubbo` instead. That's already enough.
>>>>
>>>> best regards,
>>>>
>>>> Jason
>>>>
>>>>> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>>>
>>>>> the dubbo-common library as the suggestion with the help o
>>>>
>>>>
>>
>>
Re: Duplicate class on dubbo-common
Posted by Tien Dat PHAN <tp...@gmail.com>.
Hi Jason,
The org.apache.dubbo:dubbo-serialization-kryo, for example, needs com.esotericsoftware.kryo.Kryo for Kryo serialization.
org.apache.dubbo:dubbo-serialization-kryo itself has it declared in pom.xml
But you do "unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo", you don't see it included.
And we have to declare it directly in our application pom.xml
We believe that this is not relevant, since we have to update the version of com.esotericsoftware.kryo according to org.apache.dubbo:dubbo-serialization-kryo.
Best
Dat
On 2019/10/25 08:17:18, Jason Joo <hb...@163.com> wrote:
> Hi, tien
>
> `dubbo` is a "fat" jar which includes all the classes you may possibly use.
>
> You can confirm it using "unzip" as shown below:
>
>
> bogon:2.7.3 hblzxsj$ unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo
> org/apache/dubbo/common/serialize/kryo/
> org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
> org/apache/dubbo/common/serialize/kryo/utils/
> org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
> org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
> org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/
> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.properties
> org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
> org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
> org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
> org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
> org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
> org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
> META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.xml
>
>
>
> best regards,
>
> Jason
>
> > On Oct 25, 2019, at 16:06, Tien Dat PHAN <tp...@gmail.com> wrote:
> >
> > Hi Jason,
> >
> > We found that is not enough.
> > As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
> > All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
> > This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
> >
> > Best
> > Dat
> >
> > On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
> >> Hi, tien
> >>
> >> There is a problem in your `dependencies` section.
> >> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
> >>
> >> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
> >>
> >> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
> >>
> >> So generally we just introduce `dubbo` instead. That's already enough.
> >>
> >> best regards,
> >>
> >> Jason
> >>
> >>> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
> >>>
> >>> the dubbo-common library as the suggestion with the help o
> >>
> >>
>
>
Re: Duplicate class on dubbo-common
Posted by Jason Joo <hb...@163.com>.
Hi, tien
`dubbo` is a "fat" jar which includes all the classes you may possibly use.
You can confirm it using "unzip" as shown below:
bogon:2.7.3 hblzxsj$ unzip -Z dubbo-2.7.3.jar |awk '{print $9}' |grep kryo
org/apache/dubbo/common/serialize/kryo/
org/apache/dubbo/common/serialize/kryo/KryoObjectInput.class
org/apache/dubbo/common/serialize/kryo/utils/
org/apache/dubbo/common/serialize/kryo/utils/AbstractKryoFactory.class
org/apache/dubbo/common/serialize/kryo/KryoSerialization.class
org/apache/dubbo/common/serialize/kryo/utils/PooledKryoFactory.class
META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/
META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.properties
org/apache/dubbo/common/serialize/kryo/CompatibleKryo.class
org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory$1.class
org/apache/dubbo/common/serialize/kryo/KryoObjectOutput.class
org/apache/dubbo/common/serialize/kryo/utils/PrototypeKryoFactory.class
org/apache/dubbo/common/serialize/kryo/utils/ReflectionUtils.class
org/apache/dubbo/common/serialize/kryo/utils/KryoUtils.class
org/apache/dubbo/common/serialize/kryo/utils/ThreadLocalKryoFactory.class
META-INF/maven/org.apache.dubbo/dubbo-serialization-kryo/pom.xml
best regards,
Jason
> On Oct 25, 2019, at 16:06, Tien Dat PHAN <tp...@gmail.com> wrote:
>
> Hi Jason,
>
> We found that is not enough.
> As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
> All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
> This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
>
> Best
> Dat
>
> On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
>> Hi, tien
>>
>> There is a problem in your `dependencies` section.
>> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
>>
>> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
>>
>> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
>>
>> So generally we just introduce `dubbo` instead. That's already enough.
>>
>> best regards,
>>
>> Jason
>>
>>> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
>>>
>>> the dubbo-common library as the suggestion with the help o
>>
>>
Re: Duplicate class on dubbo-common
Posted by Tien Dat PHAN <tp...@gmail.com>.
Hi Jason,
We found that is not enough.
As you have pointed out the dependency on `http://repo1.maven.org/maven2/org/apache/dubbo/`
All dependencies wrapped by org.apache.dubbo:dubbo are marked as optional.
This means on our application pom.xml, we have to declare the libraries that we need directly, as they are not brought directly from org.apache.dubbo:dubbo dependencies (check `https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html`)
Best
Dat
On 2019/10/25 01:48:29, Jason Joo <hb...@163.com> wrote:
> Hi, tien
>
> There is a problem in your `dependencies` section.
> `dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
>
> If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
>
> Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
>
> So generally we just introduce `dubbo` instead. That's already enough.
>
> best regards,
>
> Jason
>
> > On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
> >
> > the dubbo-common library as the suggestion with the help o
>
>
Re: Duplicate class on dubbo-common
Posted by Jason Joo <hb...@163.com>.
Hi, tien
There is a problem in your `dependencies` section.
`dubbo` is a single package including all codes related dubbo core like `netty-all` while `dubbo-serialization-kryo` is already included in `dubbo`.
If you want to do some customizing like removing some useless support in `dubbo` you could use another way to introduce the dependencies like: dubbo-common, dubbo-cluster and etc. .
Certainly it will be so complicated because there are so many packages to decide which are required to be introduced and you can see the full list in `http://repo1.maven.org/maven2/org/apache/dubbo/` <http://repo1.maven.org/maven2/org/apache/dubbo/%60>.
So generally we just introduce `dubbo` instead. That's already enough.
best regards,
Jason
> On Oct 25, 2019, at 00:31, Tien Dat PHAN <tp...@gmail.com> wrote:
>
> the dubbo-common library as the suggestion with the help o