我无法从命令行使用jarjar将简单的Scala程序与scala运行时库结合使用。
jarjar正确检测到依赖关系:
$ java -jar ~/Desktop/saug/jarjar-1.0.jar find jar BCT.jar scala-library.jar
/home/schani/Work/scala/bct/BCT.jar -> /home/schani/Work/scala/bct/scala-library.jar
然而,将它们组合起来并不起作用:
$ CLASSPATH=./scala-library.jar java -jar ~/Desktop/saug/jarjar-1.0.jar process rules.jjl BCT.jar BCTS.jar
我得到的jar文件仍然依赖于scala-library.jar。我是否添加CLASSPATH变量没有任何区别。我的rules.jjl文件如下所示:
keep BCT
怎么办?
答案 0 :(得分:1)
使用java“-jar”选项忽略类路径。尝试使用类路径显式指定主类,并省略“-jar”:
java -cp ~/Desktop/saug/jarjar-1.0.jar:./scala-library.jar com.tonicsystems.jarjar.Main process rules.jjl BCT.jar BCTS.jar
答案 1 :(得分:0)
尝试为scala.runtime.Nothing $类添加一个keep。当使用与Scala类似的产品(autojar; http://autojar.sourceforge.net/en_d/index.html)时,我发现这是必要的。
答案 2 :(得分:0)
jarjar不会将其他罐子重新包装到你的罐子里。它只重命名一个jar本身内的依赖关系。
使用此处列出的方法Clean way to combine multiple jars? Preferably using Ant将所有依赖的罐子重新装入你的罐子里,然后运行jarjar以防止将来依赖地狱。