当前位置: 首页 > 知识库问答 >
问题:

Java 1.8的sbt proguard问题

陆飞捷
2023-03-14

我试图用sbt proguard获得更小的标量可执行jar文件。我添加了项目/插件。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说不支持的类版本号[52.0](最大51.0,Java1.7)与sbt-proGuard,我切换到Java1.7和Java1.6与导出JAVA_HOME=/usr/libexec/java_home-v'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个答案

谢昂雄
2023-03-14

定义支持Java1.8的最新ProGuard版本

ProguardKeys.proguardVersion in Proguard := "5.3.3"

如果内存不足,还有几个有用的

javaOptions in (Proguard, ProguardKeys.proguard) := Seq("-Xmx2G")
javaOptions in (Proguard, ProguardKeys.proguard) += "-Xss1G"
林意蕴
2023-03-14

我相信这在pro guard文档中有记录。

使用java-classpath运行应用程序

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

 类似资料:
  • Java控制面板说我Java更新45。终端说: java版本"1.7.0_17"。Eclipse使用1.70_17-b02。在终端和Eclipse中,我可以从Java1.7切换到1.8吗? 首先,我试图在Java首选项中进行更改,但在实用程序中缺少。然后我发现在Mac OS X上安装了Java7,但终端仍在使用版本6,并已运行 现在终端返回java版本"1.8.0_45",但Eclipse不启动:

  • 我正在尝试创建一个新的JavaFX项目。我已经安装了1.8,我相信其中包括javafx包。在终端中运行将显示。我从这里安装的 当我转到时,选择的版本是。列表中没有版本。如果选择add new,并导航到,我会看到: 没有版本。 如何将IntelliJ更新到用户版本?

  • 针对API14及以上版本的android项目使用Java1.8有什么问题吗?我找不到任何有关这方面的文档,希望使用s。 编辑:主要集中在选项(不重复)。

  • 这是另一个StackOverflow问题的代码段: 我真的很难理解选修课的用法。返回代码是“返回映射(字符串)的值”还是NULL(如果失败)? return如何作用于方法而不是类-这是可选的。不可数()?

  • 我想在我的项目中使用lambdas,所以我决定切换到Java1.8。Android Studio(2.1.3)强迫我启用JackOptions。另外,我在mac上安装了Java1.8,当我在终端中运行javac版本时,我得到的是javac 1.8.0_101,而android studio中的JDK指向正确的JDK。 null 所以我确实打开了multidex,但它在构建96%>:app:Tran

  • 升级到Gradle 7后,该项目在Android Studio的本地PC上成功构建,但未在Gitlab管道中构建。 Gradle7.0.2需要Java11。 Gitlab管道中的错误消息为 评估项目“:app”时出现问题。未能应用插件的com。Android内部的应用程序'。Android Gradle插件需要Java 11才能运行。您当前正在使用Java1.8。您可以尝试以下一些选项:-更改ID

  • 下面的代码适用于Java1.7和Mockito版本1.10.19。 但是当我使用相同版本的Mockito迁移到Java1.8时,它开始显示下面的错误(粗体字母)。当我查看Mockito网站时,我发现Mockito3还不支持Java8。如果是,那么解决办法是什么?我应该等待他们的释放还是有什么方法可以解决这个问题。我尝试传递AnyString()来代替any(),但代码仍然中断。甚至anyObjec