以下从Spark 不使用 pureconfig的解决方案似乎是 sbt 的工作解决方案,但很难找出一个 maven 版本来执行此操作。尝试使用 spark-submit 让 pureconfig 0.8 与 spark 2.1 一起使用,但Exception in thread "main" java.lang.NoSuchMethodError: shapeless.Witness$.mkWitness(Ljava/lang/Object;)Lshapeless/Witness;
在 IntelliJ 之外仍然出现令人讨厌的错误。
assemblyShadeRules in assembly := Seq(
ShadeRule.rename("shapeless.**" -> "shadeshapless.@1")
.inLibrary("com.chuusai" % "shapeless_2.11" % "2.3.2")
.inLibrary("com.github.pureconfig" %% "pureconfig" % "0.7.0")
.inProject
)
还尝试了使用 Pureconfig从这里 Spark 提出的解决方案- 正确的 Maven 阴影插件配置,但仍然没有运气。
如果我使用创建的 jar,这是最终的配置,uber
但我不确定我是否完全理解 maven 着色是如何工作的,有没有办法避免创建一个额外的重命名的 jar?理想情况下,我只想使用带有已创建依赖项的 jar,而不是使用以下内容创建额外的第三个 jar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>shapeless</pattern>
<shadedPattern>com.shaded.shapeless</shadedPattern>
</relocation>
</relocations>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<finalName>uber-${project.artifactId}-${project.version}</finalName>
</configuration>
</plugin>