Ich benutze SBT Assembly, um ein Fettglas zu schaffen, das auf Funken laufen kann. Abhängigkeiten von grpc-netty
. Die Guava-Version von Spark ist älter als die, die von grpc-netty
benötigt wird, und ich stolperte in diesen Fehler: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument . Ich konnte dies lösen, indem ich userClassPathFirst auf "spark" auf "true" setzte, aber zu anderen Fehlern führte.
Korrigiere mich, wenn ich falsch liege, aber von dem, was ich verstehe, sollte ich userClassPathFirst nicht auf true setzen müssen, wenn ich die Schattierung richtig mache. Hier ist, wie ich jetzt schattiere:
%Vor%Was mache ich hier falsch und wie repariere ich es?
Du bist fast da. Was shadeRule
macht ist benennt Klassen Namen um, nicht Bibliotheksnamen:
Die Hauptregel ShadeRule.rename wird zum Umbenennen von Klassen verwendet. Alle Verweise auf die umbenannten Klassen werden ebenfalls aktualisiert.
Tatsächlich gibt es in com.google.guava:guava
keine Klassen mit dem Paket com.google.guava
:
Es sollte ausreichen, um Ihre Schattierungsregel zu ändern:
%Vor% Sie müssen also userClassPathFirst
nicht ändern.
Außerdem können Sie Ihre Schattierungsregel wie folgt vereinfachen:
%Vor% Da org.apache.spark
Abhängigkeiten provided
sind, werden sie nicht in Ihr jar eingeschlossen und nicht schattiert (daher wird spark eine eigene nicht-schattierte Version von Guave verwenden, die es auf dem Cluster hat).
Tags und Links apache-spark sbt guava grpc sbt-assembly