Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从命令行使用jarjar?_Java_Scala_Jar_Jarjar - Fatal编程技术网

Java 如何从命令行使用jarjar?

Java 如何从命令行使用jarjar?,java,scala,jar,jarjar,Java,Scala,Jar,Jarjar,我在使用命令行中的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 但是,将它们结合起来是行不通的: $ CL

我在使用命令行中的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变量没有区别。My rules.jjl文件如下所示:

keep BCT
怎么办?

使用java“-jar”选项会忽略类路径。尝试使用类路径显式指定主类,并省略“-jar”:


尝试为scala.runtime.Nothing$类添加一个keep。我发现在Scala中使用类似的产品(autojar;)时,这是必要的。

jarjar不会将其他jar重新打包到您的jar中。它只重命名一个jar本身内部的依赖项


使用这里介绍的方法将所有依赖jar重新装入您的jar,然后运行jarjar以防止将来的依赖地狱。

这只是绝地武士的一个思维技巧。希望它不会让你太累……那也不行。jarjar似乎只从命令行上指定的输入jar文件中获取类,而不是从任何依赖的jar中获取类,而且似乎没有指定它们的方法。实际上,使用ant任务重新压缩并不是最理想的解决方案。我使用EclipseFatJAR插件来实现这一点。基本上,创建一个空项目,将所有jar放在项目的构建路径中,然后使用胖jar插件导出到胖jar。我不想重命名任何包,但收集所有依赖项。因此,在规则中,我有一个keep规则与BCT.jar中主类的包一起使用
java -cp ~/Desktop/saug/jarjar-1.0.jar:./scala-library.jar com.tonicsystems.jarjar.Main process rules.jjl BCT.jar BCTS.jar