Scala 可运行 JAR 的 ProGuard 进程
ProGuard process for Scala runnable JAR
我正在尝试压缩(以及混淆和优化)打包到可运行 JAR 中的简单 Scala 程序。
我在 Scala IDE 中创建了 2 个项目:简单的 Scala 程序和 Java 执行此 Scala 程序的包装器。然后我使用 "Export" -> "Runnable JAR file" Eclipse 实用程序和 "Extract required libraries into generated JAR" 选项生成可运行的 JAR。
之后,我尝试使用 ProGuard 收缩器(GUI 版本)收缩 JAR,但失败并出现以下注释和警告:output at pastebin.com.
有什么正确的方法吗?
在 http://proguard.sourceforge.net/manual/examples.html#scala 的 scala 项目上使用 运行ning proguard 的建议参数是一个不错的起点。这些基本选项可能会解决大部分警告,例如:
-dontwarn scala.**
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
-keep class * implements org.xml.sax.EntityResolver
-keepclassmembers class * {
** MODULE$;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
long eventCount;
int workerCounts;
int runControl;
scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
int base;
int sp;
int runState;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
int status;
}
-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
}
我也用这些:
-keepattributes Signature,*Annotation*
-dontobfuscate
// turn some optimizations off when using -dontobfuscate
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable,!class/unboxing/enum
// lots of other classes, e.g. logging
-keep public class ch.qos.logback.** { *;}
-keep public class org.slf4j.** { *;}
如果你想自动化它,你也可以 运行 在 sbt 中使用 sbt-proguard plugin. The proguard output can then be fed into sbt-assembly or sbt-native-packager proguard 如果你想将它合并到一个可执行的 jar 或包中。
我正在尝试压缩(以及混淆和优化)打包到可运行 JAR 中的简单 Scala 程序。
我在 Scala IDE 中创建了 2 个项目:简单的 Scala 程序和 Java 执行此 Scala 程序的包装器。然后我使用 "Export" -> "Runnable JAR file" Eclipse 实用程序和 "Extract required libraries into generated JAR" 选项生成可运行的 JAR。
之后,我尝试使用 ProGuard 收缩器(GUI 版本)收缩 JAR,但失败并出现以下注释和警告:output at pastebin.com.
有什么正确的方法吗?
在 http://proguard.sourceforge.net/manual/examples.html#scala 的 scala 项目上使用 运行ning proguard 的建议参数是一个不错的起点。这些基本选项可能会解决大部分警告,例如:
-dontwarn scala.**
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
-keep class * implements org.xml.sax.EntityResolver
-keepclassmembers class * {
** MODULE$;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinPool {
long eventCount;
int workerCounts;
int runControl;
scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode syncStack;
scala.concurrent.forkjoin.ForkJoinPool$WaitQueueNode spareStack;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinWorkerThread {
int base;
int sp;
int runState;
}
-keepclassmembernames class scala.concurrent.forkjoin.ForkJoinTask {
int status;
}
-keepclassmembernames class scala.concurrent.forkjoin.LinkedTransferQueue {
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference head;
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference tail;
scala.concurrent.forkjoin.LinkedTransferQueue$PaddedAtomicReference cleanMe;
}
我也用这些:
-keepattributes Signature,*Annotation*
-dontobfuscate
// turn some optimizations off when using -dontobfuscate
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable,!class/unboxing/enum
// lots of other classes, e.g. logging
-keep public class ch.qos.logback.** { *;}
-keep public class org.slf4j.** { *;}
如果你想自动化它,你也可以 运行 在 sbt 中使用 sbt-proguard plugin. The proguard output can then be fed into sbt-assembly or sbt-native-packager proguard 如果你想将它合并到一个可执行的 jar 或包中。