flo
flo copied to clipboard
Dependency conflict: multiple versions of com.google.guava:guava:jar
Hi, we found multiple versions of com.google.guava:guava:jar exist in flo-api-generator 0.5.1-SNAPSHOT. As shown in the following dependency tree, due to Maven version management, only com.google.guava:guava:jar:23.0 will be loaded, and com.google.guava:guava:jar:17.0 will be shadowed during the packaging process.
However, several methods only included in the shadowed version com.google.guava:guava:jar:17.0, are invoked by flo-api-generator. As a result, an exception could be thrown when your project referencing the missing method.
Dependency tree:
com.spotify:flo-api-generator:jar:0.5.0 +- org.trimou:trimou-core:jar:2.0.1.Final:compile | - org.slf4j:slf4j-api:jar:1.7.25:compile (version managed from 1.7.4) +- com.google.testing.compile:compile-testing:jar:0.6:test | +- (junit:junit:jar:4.12:test - version managed from 4.10; omitted for duplicate) | +- (com.google.truth:truth:jar:0.24:test - omitted for duplicate) | +- com.google.guava:guava:jar:23.0:test | | +- com.google.code.findbugs:jsr305:jar:3.0.2:test (version managed from 1.3.9) | | +- com.google.errorprone:error_prone_annotations:jar:2.0.19:test (version managed from 2.0.18) | | +- com.google.j2objc:j2objc-annotations:jar:1.1:test | | - org.codehaus.mojo:animal-sniffer-annotations:jar:1.14:test | - com.sun:tools:jar:1.8.0_111:system +- com.google.truth:truth:jar:0.24:test | +- (com.google.guava:guava:jar:23.0:test - version managed from 17.0; omitted for duplicate) | - (junit:junit:jar:4.12:test - version managed from 4.10; omitted for duplicate) +- com.google.auto.value:auto-value:jar:1.4:provided +- ch.qos.logback:logback-classic:jar:1.2.3:test | +- ch.qos.logback:logback-core:jar:1.2.3:test | - (org.slf4j:slf4j-api:jar:1.7.25:test - version managed from 1.7.4; omitted for duplicate) +- junit:junit:jar:4.12:test | - org.hamcrest:hamcrest-core:jar:1.3:test +- org.hamcrest:hamcrest-library:jar:1.3:test | - (org.hamcrest:hamcrest-core:jar:1.3:test - omitted for duplicate) - org.mockito:mockito-core:jar:2.21.0:test +- net.bytebuddy:byte-buddy:jar:1.8.15:test +- net.bytebuddy:byte-buddy-agent:jar:1.8.15:test - org.objenesis:objenesis:jar:2.6:test
Hope this can help you.
Best regards, Leo
The shadowed methods that would be referenced but not be loaded, are listed below: <RiskMethod>com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets: java.util.Set entrySet()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableEnumMap$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$1: boolean hasNext()</RiskMethod> <RiskMethod>com.google.common.collect.DenseImmutableTable$ImmutableArrayMap$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.RegularImmutableMultiset: boolean contains(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.RegularImmutableBiMap$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableEnumMap$1: boolean contains(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.TreeRangeMap$AsMapOfRanges: java.util.Set entrySet()</RiskMethod> <RiskMethod>com.google.common.collect.HashBiMap$Inverse: java.util.Set entrySet()</RiskMethod> <RiskMethod>com.google.common.io.ByteSource: void clinit ()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets$1$1: boolean hasNext()</RiskMethod> <RiskMethod>com.google.common.cache.RemovalNotification: java.lang.String toString()</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$9: void remove()</RiskMethod> <RiskMethod>com.google.common.base.Objects$ToStringHelper: java.lang.String toString()</RiskMethod> <RiskMethod>com.google.common.collect.TreeRangeMap$SubRangeMap$SubRangeMapAsMap$3: boolean retainAll(java.util.Collection)</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$1: int nextIndex()</RiskMethod> <RiskMethod>com.google.common.cache.RemovalNotification: java.lang.Object getKey()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableEnumMap$1: int size()</RiskMethod> <RiskMethod>com.google.common.collect.Synchronized$SynchronizedAsMapEntries$1: java.lang.Object next()</RiskMethod> <RiskMethod>com.google.common.collect.SingletonImmutableSet: boolean equals(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$1: int previousIndex()</RiskMethod> <RiskMethod>com.google.common.collect.ArrayTable$ArrayMap$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$5: java.util.NavigableSet tailSet(java.lang.Object,boolean)</RiskMethod> <RiskMethod>com.google.common.collect.Iterables$10: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$6: java.lang.Object getKey()</RiskMethod> <RiskMethod>com.google.common.collect.TreeTraverser$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets$1$1: java.lang.Object next()</RiskMethod> <RiskMethod>com.google.common.collect.SingletonImmutableList: boolean contains(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.Maps$1: java.lang.Object next()</RiskMethod> <RiskMethod>com.google.common.base.Objects$ToStringHelper: com.google.common.base.Objects$ToStringHelper add(java.lang.String,java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.base.Objects$ToStringHelper: com.google.common.base.Objects$ToStringHelper add(java.lang.String,boolean)</RiskMethod> <RiskMethod>com.google.common.util.concurrent.Callables$3: void run()</RiskMethod> <RiskMethod>com.google.common.collect.AbstractNavigableMap$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.RegularImmutableBiMap$1: int hashCode()</RiskMethod> <RiskMethod>com.google.common.primitives.Ints: void clinit ()</RiskMethod> <RiskMethod>com.google.common.collect.SingletonImmutableList: boolean equals(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.cache.RemovalNotification: int hashCode()</RiskMethod> <RiskMethod>com.google.common.util.concurrent.SerializingExecutor$1: java.lang.String toString()</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$4: void remove()</RiskMethod> <RiskMethod>com.google.common.collect.TreeRangeMap$SubRangeMap$SubRangeMapAsMap$3: boolean removeAll(java.util.Collection)</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.SingletonImmutableList: boolean isEmpty()</RiskMethod> <RiskMethod>com.google.common.util.concurrent.ListenerCallQueue: void run()</RiskMethod> <RiskMethod>com.google.common.base.Objects: com.google.common.base.Objects$ToStringHelper toStringHelper(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$6: java.lang.Object next()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets: java.util.Collection values()</RiskMethod> <RiskMethod>com.google.common.collect.RegularImmutableSortedSet: boolean isEmpty()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableList: void clinit ()</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$1: java.lang.Object previous()</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$5: java.lang.Object next()</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$5: boolean hasNext()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$6: java.lang.Object getValue()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$5: boolean addAll(java.util.Collection)</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMap$MapViewOfValuesAsSingletonSets: java.util.Set keySet()</RiskMethod> <RiskMethod>com.google.common.collect.SingletonImmutableList: int hashCode()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMultiset: boolean containsAll(java.util.Collection)</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$6: boolean hasNext()</RiskMethod> <RiskMethod>com.google.common.cache.RemovalNotification: boolean equals(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.util.concurrent.Callables$2: java.lang.Object call()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$5: java.util.NavigableSet descendingSet()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableSortedMap: boolean containsValue(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$1: boolean hasPrevious()</RiskMethod> <RiskMethod>com.google.common.io.CharSource$CharSequenceCharSource$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.SingletonImmutableSet: boolean isEmpty()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMultiset$EntrySet: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.Synchronized$SynchronizedAsMapValues$1: java.lang.Object next()</RiskMethod> <RiskMethod>com.google.common.base.Objects: java.lang.Object firstNonNull(java.lang.Object,java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.AbstractNavigableMap: java.util.Set entrySet()</RiskMethod> <RiskMethod>com.google.common.collect.ImmutableMapValues$1: java.lang.Object get(int)</RiskMethod> <RiskMethod>com.google.common.collect.RegularImmutableTable$CellSet: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$5: java.util.NavigableSet headSet(java.lang.Object,boolean)</RiskMethod> <RiskMethod>com.google.common.collect.HashBiMap$Inverse$1: java.util.Iterator iterator()</RiskMethod> <RiskMethod>com.google.common.collect.Maps$5: boolean add(java.lang.Object)</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$5: void remove()</RiskMethod> <RiskMethod>com.google.common.cache.RemovalNotification: java.lang.Object getValue()</RiskMethod> <RiskMethod>com.google.common.collect.Iterators$10: java.lang.String toString()</RiskMethod> </RiskMethods>
@kanterov , Hi! I noticed your reported issue https://github.com/spotify/flo/issues/184. We developed a tool that can automatically diagnose dependency conflict problem. This bug report is generated by it. If you are interested about this tool, please contact me via Email: [email protected]. As it is not officially released, I can only share it via email. Hope you can try it out and give us some suggestions to improve it.
Best, Leo