Процесс ProGuard для запускаемого JAR Scala

1

Я пытаюсь сжимать (а также обфускать и оптимизировать) простую программу Scala, которая упакована в runnable JAR.

Я создал 2 проекта в среде Scala IDE: простая программа Scala и оболочка Java, которая выполняет эту программу Scala. Затем я сгенерировал runnable JAR, используя "Export" → "Runnable JAR file" Eclipse с утилитой "Извлечь требуемые библиотеки в сгенерированную JAR".

После этого я попытался сжать JAR с помощью термоусадочной ткани ProGuard (версия GUI), но это не удалось со следующими примечаниями и предупреждениями: вывод на pastebin.com.

Есть ли правильный способ сделать это?

Теги:
proguard
executable-jar

1 ответ

0

Хорошее место для начала - предлагаемые параметры для запуска proguard в проекте scala по адресу http://proguard.sourceforge.net/manual/examples.html#scala. Эти базовые варианты, вероятно, решат большинство этих предупреждений, например:

-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.** { *;}    

Если вы хотите автоматизировать его, вы также можете запустить proguard в sbt с помощью плагина sbt-proguard. Выход proguard можно затем подать в sbt-assembly или sbt-native-packager, если вы хотите включить его в исполняемую банку или пакет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню