Java 1.8的sbt-proguard问题

时间:2015-03-14 23:37:45

标签: sbt proguard sbt-proguard

我正在尝试使用sbt-proguard获取更小的标量可执行jar文件。 我添加了project / plugin.sbt这两行代码:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")

addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")

第一个是获取uberjar文件,我可以使用sbt assembly的uberjar工作正常。

然后,我执行sbt proguard:proguard以获取此错误消息。

[error] Error: Can't read [/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/rt.jar] (Can't process class [apple/applescript/AppleScriptEngine.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7)))
java.lang.RuntimeException: Proguard failed with exit code [1]
    at scala.sys.package$.error(package.scala:27)
    ...
    at java.lang.Thread.run(Thread.java:745)
[error] (proguard:proguard) Proguard failed with exit code [1]

从这篇文章的提示:ProGuard says Unsupported class version number [52.0] (maximum 51.0, Java 1.7) with sbt-proguard, 我使用 export JAVA_HOME = /usr/libexec/java_home -v '1.6*' 命令切换到Java 1.7和Java 1.6,以运行proguard来获取细长的jar文件,但这不会运行。

Invalid or corrupt jarfile target/scala-2.11/proguard/myproject_2.11-1.0.jar

可能有什么问题?这些是添加到build.sbt的行。

proguardSettings

ProguardKeys.options in Proguard ++= Seq("-dontnote", "-dontwarn", "-ignorewarnings")

ProguardKeys.options in Proguard += ProguardOptions.keepMain("core.HelloWorld")

2 个答案:

答案 0 :(得分:1)

我相信这是在职业护卫docs中记录的。

使用java -classpath <jarpath> --class classname <program-arguments>运行您的应用程序应该可以。

这是因为默认情况下,pro guard会从jar中删除所有MANIFEST文件,因此java运行时无法找到jar类条目。另一种方法是保留MANIFEST.md文件并使用java -jar选项运行它,但我从未尝试过。

答案 1 :(得分:1)

定义支持Java 1.8的最新Proguard版本

URL=http://0.0.0.0:8885/PCW/login/admin.php'>

如果你用完了mem,还有几个有用的是

ProguardKeys.proguardVersion in Proguard := "5.3.3"