首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ProGuard表示不支持的类版本号[52.0] (最多为51.0,Java1.7),带有sbt保护

ProGuard表示不支持的类版本号[52.0] (最多为51.0,Java1.7),带有sbt保护
EN

Stack Overflow用户
提问于 2014-04-19 13:14:24
回答 5查看 21.6K关注 0票数 27

我使用的是Mac 10.9.2SBT0.13.3-快照(从源代码构建)、Java 8sbt-proguard 0.2.2插件。

SBT0.13.3-快照

代码语言:javascript
复制
[jacek]> sbtVersion
[info] 0.13.3-SNAPSHOT

Java 8

代码语言:javascript
复制
$ /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/bin/java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

project/plugins.sbt

代码语言:javascript
复制
addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")

当我在shell中运行proguard:proguard时,它崩溃了,例外情况如下:

代码语言:javascript
复制
[sbt-updates]> show proguard:proguard
[info] ProGuard, version 4.9
[info] Reading program directory [/Users/jacek/oss/sbt-updates/target/scala-2.10/sbt-0.13/classes] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-concurrent_2.10/bundles/scalaz-concurrent_2.10-7.1.0-M6.jar] (filtered)
[info] Reading program jar [/Users/jacek/.sbt/boot/scala-2.10.3/lib/scala-library.jar] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-core_2.10/bundles/scalaz-core_2.10-7.1.0-M6.jar] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-effect_2.10/bundles/scalaz-effect_2.10-7.1.0-M6.jar] (filtered)
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar]
[error] Error: Can't read [/Library/Java/JavaVirtualMachines/jdk1.8.0.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)))
[trace] Stack trace suppressed: run last proguard:proguard for the full output.
[error] (proguard:proguard) Proguard failed with exit code [1]
[error] Total time: 16 s, completed Apr 19, 2014 2:27:56 PM

为什么会是错误的原因?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-04-19 13:14:24

看来ProGuard和sbt-proguard还不支持Java8,修改脚本中使用的Java版本来启动sbt是有帮助的。

代码语言:javascript
复制
[sbt-updates]> show proguard:proguard
[info] Compiling 8 Scala sources to /Users/jacek/oss/sbt-updates/target/scala-2.10/sbt-0.13/classes...
[warn] there were 6 feature warning(s); re-run with -feature for details
[warn] one warning found
[info] ProGuard, version 4.9
[info] Reading program directory [/Users/jacek/oss/sbt-updates/target/scala-2.10/sbt-0.13/classes] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-concurrent_2.10/bundles/scalaz-concurrent_2.10-7.1.0-M6.jar] (filtered)
...

这与下面的Java 7版本有关

代码语言:javascript
复制
$ /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
票数 11
EN

Stack Overflow用户

发布于 2020-02-25 11:17:44

这个问题真的很有趣,我面临着同样的问题,唯一的不同之处就是我通过使用maven编程添加了Proguard。因此,我认为,张贴我的解决方案将是有帮助的,尽管它有点不同的主要问题。对于所有使用maven并面临相同问题的用户,我的解决办法是通过在插件中使用它作为运行时来更新Proguard的版本,因此工作的pom.xml如下所示

代码语言:javascript
复制
  <plugin>
                    <groupId>com.github.wvengen</groupId>
                    <artifactId>proguard-maven-plugin</artifactId>
                    <version>2.0.14</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>proguard</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <obfuscate>true</obfuscate>
                        <attach>true</attach>
                        <appendClassifier>false</appendClassifier>
                        <addMavenDescriptor>true</addMavenDescriptor>
                        <injar>${project.build.finalName}-jar-with-dependencies.jar</injar>
                        <injarNotExistsSkip>true</injarNotExistsSkip>
                        <libs>
                            <lib>${java.home}/lib/rt.jar</lib>
                            <lib>${java.home}/lib/jce.jar</lib>
                            <lib>${java.home}/lib/ext/sunjce_provider.jar</lib>
                        </libs>
                        <options>
                        <option>-allowaccessmodification</option>
                        <option>-optimizationpasses 3</option>
                        <option>-overloadaggressively</option>
                        <option>-repackageclasses ''</option>
                        <option>-dontusemixedcaseclassnames</option>
                        <option>-dontskipnonpubliclibraryclasses</option>
                        <option>-flattenpackagehierarch</option>
                        <option>-dontwarn</option> <!-- added option to ignore com.sun missing classes -->
                            <option>-keep public class com.StocksNews.App {
                                public static void main(java.lang.String[]);
                                }
                            </option>
                        </options>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>net.sf.proguard</groupId>
                            <artifactId>proguard-base</artifactId>
                            <version>6.1.1</version>
                            <scope>runtime</scope>
                        </dependency>
                    </dependencies>
                </plugin>
票数 8
EN

Stack Overflow用户

发布于 2016-01-05 23:56:14

通过将proguardVersion中的键build.sbt更改为比5.0更新的设置,可以更新sbt-pro卫士使用的Proguard版本。

代码语言:javascript
复制
ProguardKeys.proguardVersion in Proguard := "5.2.1"

请参阅:https://github.com/sbt/sbt-proguard/issues/5

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23170502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档