You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@reef.apache.org by "Franky Green (JIRA)" <ji...@apache.org> on 2019/02/21 02:17:00 UTC
[jira] [Created] (REEF-2056) Invoking unexpected methods, due to
dependency conflicts on org.ow2.asm:asm
Franky Green created REEF-2056:
----------------------------------
Summary: Invoking unexpected methods, due to dependency conflicts on org.ow2.asm:asm
Key: REEF-2056
URL: https://issues.apache.org/jira/browse/REEF-2056
Project: REEF
Issue Type: Bug
Components: REEF Vortex
Affects Versions: 0.16
Reporter: Franky Green
Fix For: 0.17
Hi, in *apache-reef-0.16.0* (*reef-reef-project-0.16.0\lang\java\reef-applications\reef-vortex* module), there are mulptiple versions of *org.ow2.asm:asm.jar*. However, according to Maven's dependency management strategy, only *org.ow2.asm:asm:jar:4.2* can be loaded, and *org.ow2.asm:asm:jar:5.0.3* will be shadowed.
As shown in the following dependency tree, *com.esotericsoftware:kryo:jar:3.0.3:compile* expects to reference *org.ow2.asm:asm:jar:5.0.3:compile*. But due to dependency conflicts, Maven actually loads *org.ow2.asm:asm:jar:4.2*. As a result, *com.esotericsoftware:kryo:jar:3.0.3:compile* has to invoke the methods included in the unexpected version *org.ow2.asm:asm:jar:4.2*, which may cause inconsistent semantic behaviors.
For instance, method *org.apache.reef.vortex.common.KryoUtils.deserialize(byte[])* actually references method {color:#d04437}*org.objectweb.asm.ClassReader.accept(org.objectweb.asm.ClassVisitor,org.objectweb.asm.Attribute[],int)*{color} in the unexpected version *org.ow2.asm:asm:jar:4.2* via the following invocation path:
{code:java}
<org.apache.reef.vortex.common.KryoUtils: java.lang.Object deserialize(byte[])> D:\testcase\NewProject3\reef-reef-project-0.16.0\lang\java\reef-applications\reef-vortex\target\classes
<com.esotericsoftware.kryo.Kryo: java.lang.Object readClassAndObject(com.esotericsoftware.kryo.io.Input)> D:\cEnvironment\repository\com\esotericsoftware\kryo\3.0.3\kryo-3.0.3.jar
<com.esotericsoftware.kryo.serializers.FieldSerializer: void setGenerics(com.esotericsoftware.kryo.Kryo,java.lang.Class[])> D:\cEnvironment\repository\com\esotericsoftware\kryo\3.0.3\kryo-3.0.3.jar
<com.esotericsoftware.kryo.serializers.FieldSerializer: void rebuildCachedFields(boolean)> D:\cEnvironment\repository\com\esotericsoftware\kryo\3.0.3\kryo-3.0.3.jar
<com.esotericsoftware.reflectasm.FieldAccess: com.esotericsoftware.reflectasm.FieldAccess get(java.lang.Class)> D:\cEnvironment\repository\com\esotericsoftware\reflectasm\1.10.1\reflectasm-1.10.1.jar
<org.objectweb.asm.ClassWriter: byte[] toByteArray()> D:\cEnvironment\repository\org\ow2\asm\asm\4.2\asm-4.2.jar
<org.objectweb.asm.ClassReader: void accept(org.objectweb.asm.ClassVisitor,int)> D:\cEnvironment\repository\org\ow2\asm\asm\4.2\asm-4.2.jar
<org.objectweb.asm.ClassReader: void accept(org.objectweb.asm.ClassVisitor,org.objectweb.asm.Attribute[],int)>
{code}
By further analyzing, the expected callee *org.objectweb.asm.ClassReader.accept(org.objectweb.asm.ClassVisitor,org.objectweb.asm.Attribute[],int)* in shadowed version *org.ow2.asm:asm:jar:5.0.3*, have different implementations from the actual callees with the same signatures (same method names, same paremeters) included in the unexpected (but actual loaded) version *org.ow2.asm:asm:jar:4.2*, which leads to different behaviors.
_*{color:#59afe1}Solution:{color}*_
Use the newer version *org.ow2.asm:asm:jar:5.0.3* to keep the version consistency.
*Dependency Tree*-----
[INFO] org.apache.reef:vortex:jar:0.16.0
[INFO] +- org.apache.reef:reef-common:jar:0.16.0:compile
[INFO] | +- org.apache.reef:reef-annotations:jar:0.16.0:compile
[INFO] | +- org.apache.reef:reef-utils:jar:0.16.0:compile
[INFO] | | +- javax.inject:javax.inject:jar:1:compile
[INFO] | | \- (net.jcip:jcip-annotations:jar:1.0:compile - omitted for duplicate)
[INFO] | +- com.google.protobuf:protobuf-java:jar:2.5.0:compile
[INFO] | +- org.apache.reef:wake:jar:0.16.0:compile
[INFO] | | +- cglib:cglib:jar:3.1:compile
[INFO] | | | \- *org.ow2.asm:asm:jar:4.2:compile*
[INFO] | | +- io.netty:netty-all:jar:4.0.21.Final:compile
[INFO] | | +- (com.google.protobuf:protobuf-java:jar:2.5.0:compile - omitted for duplicate)
[INFO] | | +- (org.apache.reef:tang:jar:0.16.0:compile - omitted for duplicate)
[INFO] | | \- (net.jcip:jcip-annotations:jar:1.0:compile - omitted for duplicate)
[INFO] | +- org.apache.reef:tang:jar:0.16.0:compile
[INFO] | | +- (com.google.protobuf:protobuf-java:jar:2.5.0:compile - omitted for duplicate)
[INFO] | | +- commons-configuration:commons-configuration:jar:1.10:compile
[INFO] | | | +- commons-lang:commons-lang:jar:2.6:compile
[INFO] | | | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | | +- commons-cli:commons-cli:jar:1.2:compile
[INFO] | | +- (javax.inject:javax.inject:jar:1:compile - omitted for duplicate)
[INFO] | | \- org.apache.avro:avro:jar:1.8.1:compile
[INFO] | | +- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
[INFO] | | +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
[INFO] | | | \- (org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile - omitted for duplicate)
[INFO] | | +- com.thoughtworks.paranamer:paranamer:jar:2.7:compile
[INFO] | | +- org.xerial.snappy:snappy-java:jar:1.1.1.3:compile
[INFO] | | +- org.apache.commons:commons-compress:jar:1.8.1:compile
[INFO] | | +- org.tukaani:xz:jar:1.5:compile
[INFO] | | \- org.slf4j:slf4j-api:jar:1.7.7:compile
[INFO] | +- net.jcip:jcip-annotations:jar:1.0:compile
[INFO] | +- org.apache.commons:commons-lang3:jar:3.3.2:compile
[INFO] | \- com.google.code.findbugs:jsr305:jar:3.0.1:compile
[INFO] +- junit:junit:jar:4.11:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.mockito:mockito-core:jar:1.9.5:test
[INFO] | +- (org.hamcrest:hamcrest-core:jar:1.1:test - omitted for conflict with 1.3)
[INFO] | \- (org.objenesis:objenesis:jar:1.0:compile - scope updated from test; omitted for duplicate)
[INFO] +- org.apache.reef:reef-runtime-local:jar:0.16.0:compile
[INFO] | \- (org.apache.reef:reef-common:jar:0.16.0:compile - omitted for duplicate)
[INFO] +- com.esotericsoftware:kryo-shaded:jar:3.0.3:compile
[INFO] | +- com.esotericsoftware:minlog:jar:1.3.0:compile
[INFO] | \- org.objenesis:objenesis:jar:1.0:compile
[INFO] \- de.javakaffee:kryo-serializers:jar:0.37:compile
[INFO] +- com.esotericsoftware:kryo:jar:3.0.3:compile
[INFO] | +- com.esotericsoftware:reflectasm:jar:1.10.1:compile
[INFO] | | \- (*org.ow2.asm:asm:jar:5.0.3:compile - omitted for conflict with 4.2*)
[INFO] | +- (com.esotericsoftware:minlog:jar:1.3.0:compile - omitted for duplicate)
[INFO] | \- (org.objenesis:objenesis:jar:2.1:compile - omitted for conflict with 1.0)
[INFO] \- (com.google.protobuf:protobuf-java:jar:2.5.0:compile - version managed from 2.6.1; omitted for duplicate)
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)