Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
ProGuard表示sbt ProGuard不支持类版本号[52.0](最大51.0,Java 1.7)_Sbt_Proguard_Java 8 - Fatal编程技术网

ProGuard表示sbt ProGuard不支持类版本号[52.0](最大51.0,Java 1.7)

ProGuard表示sbt ProGuard不支持类版本号[52.0](最大51.0,Java 1.7),sbt,proguard,java-8,Sbt,Proguard,Java 8,我使用的是Mac OS X 10.9.2和sbt 0.13.3-SNAPSHOT(基于源代码构建)、Java 8和sbt proguard 0.2.2插件 sbt 0.13.3-SNAPSHOT [jacek]> sbtVersion [info] 0.13.3-SNAPSHOT Java8 $ /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/bin/java -version java version "1.8.

我使用的是Mac OS X 10.9.2sbt 0.13.3-SNAPSHOT(基于源代码构建)、Java 8sbt proguard 0.2.2插件

sbt 0.13.3-SNAPSHOT

[jacek]> sbtVersion
[info] 0.13.3-SNAPSHOT
Java8

$ /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)
项目/插件.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")
当我在sbt shell中运行
proguard:proguard
时,它发生了以下异常:

[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

为什么可能是错误的原因?

似乎ProGuard和sbt ProGuard尚不支持Java 8,因此更改脚本中使用的Java版本以启动sbt会有所帮助

[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有关:

$ /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)

通过将
build.sbt
中的键
proguardVersion
更改为高于5.0的设置,可以更新sbt Proguard使用的Proguard版本,例如

ProguardKeys.proguardVersion in Proguard := "5.2.1"

请参阅:

这个问题非常有趣,我面临的问题与我使用maven以编程方式添加Proguard的问题相同,唯一不同的是。因此,我认为发布我的解决方案会有所帮助,尽管它与主要问题有点不同。对于所有使用maven并面临相同问题的人,我的解决方法是更新Proguard的版本,将其用作插件内的运行时,因此工作的pom.xml如下所示

  <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>

com.github.wvengen
proguard maven插件
2.0.14
包裹
前卫
真的
真的
假的
真的
${project.build.finalName}-jar-with-dependencies.jar
真的
${java.home}/lib/rt.jar
${java.home}/lib/jce.jar
${java.home}/lib/ext/sunjce_provider.jar
-允许访问修改
-优化过程3
-超载
-重新打包类“”
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-扁平包装层级
-唐特沃恩
-保持公共类com.StocksNews.App{
公共静态void main(java.lang.String[]);
}
net.sf.proguard
前卫基地
6.1.1
运行时

我通过从下面的链接更新到最新版本的ProGuad解决了这个问题


Proguard确实支持java 8,但我没有使用sbt Proguard,我最终在构建工件作为构建过程中的一个阶段后混淆了jar。你可以在这里看到我的完整答案:这是一个完美的解决方案。