【发布时间】:2019-12-08 15:53:01
【问题描述】:
我正在使用 scala 和 maven (maven-shade-plugin) 制作一个 uber-jar(即内部包含 scala-runtime 类)。我需要它在类路径上运行(使用 scala 控制台)和没有 scala 运行时库(作为独立 jar)。所以我做了以下事情:
- 使用 maven-shade-plugin 将着色类从 scala 转换为 scala_2_12_8(即 scala 运行时位于 scala_2_12_8 包中)
- 运行 scala 2.12.8 控制台
- 使用 require my.jar (my_2.12-2.1.3-SNAPSHOT.jar) 加载了我的 jar 当我尝试使用新的 org.test.MyObject 创建对象时,出现以下异常:
(class java.lang.RuntimeException/Scala class file does not contain Scala annotation)
error: error while loading package, class file '/home/cergey/Documents/my_2.12-2.1.3-SNAPSHOT.jar(scala_2_12_8/package.class)' is broken
(class java.lang.RuntimeException/Scala class file does not contain Scala annotation)
error: error while loading MyObject, class file '/home/cergey/Documents/my_2.12-2.1.3-SNAPSHOT.jar(org/test/MyObject.class)' is broken
(class java.lang.RuntimeException/Scala class file does not contain Scala annotation)
<console>:12: error: my.MyObject does not have a constructor
new test.MyObject
Scala 控制台版本和 jar 中的版本匹配。 当我在没有 scala 运行时类的情况下运行时,一切正常。 有人可以指出正在发生的事情,即为什么 jvm 在非 scala 类上寻找 Scala 注释?
【问题讨论】:
-
你看过
sbt-assembly吗? -
是的,我尝试了另一个使用 sbt-assembly 插件的项目,结果是一样的。