2016-08-04 27 views
0

我正在努力使sbt-proguard插件正常工作。我有一個類庫,我想混淆,但我似乎無法得到插件輸出沒有上述錯誤。我已經指定了保留選項,或者至少我認爲我有,但我沒有運氣。我複製了Proguard網站上的保留選項,它表示它是用於類庫的。另外,我不認爲插件正在響應我配置的選項。sbt-proguard您必須爲縮小步驟指定'-keep'選項

例如,我想要更詳細的輸出,看看輸出是否能給我一個線索,說明我做錯了什麼。但是,每當我查看日誌文件時,它總是指定默認選項。以下是我的配置。有人能幫我解決這個問題嗎?我完全失去了。謝謝

import sbt.Keys._ 
import com.typesafe.sbt.SbtProguard._ 

import ProguardKeys._ 


lazy val commonDependencies = Seq(
    Dependencies.Libraries.junit, 
    Dependencies.Libraries.springBootLogging, 
    Dependencies.Libraries.scalaMock, 
    Dependencies.Libraries.joda, 
    Dependencies.Libraries.scalaTestPlus, 
    Dependencies.Libraries.scalaXml, 
    Dependencies.Libraries.commonsCodec, 
    Dependencies.Libraries.typeSafeConfig 
) 

val keepClasses = 
    """ 
    |-injars  in.jar 
    |-outjars  out.jar 
    |-libraryjars <java.home>/lib/rt.jar 
    |-printmapping out.map 
    | 
    |-keepparameternames 
    |-renamesourcefileattribute SourceFile 
    |-keepattributes Exceptions,InnerClasses,Signature,Deprecated, 
    |    SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 
    | 
    |-keep public class * { 
    | public protected *; 
    |} 
    | 
    |-keepclassmembernames class * { 
    | java.lang.Class class$(java.lang.String); 
    | java.lang.Class class$(java.lang.String, boolean); 
    |} 
    | 
    |-keepclasseswithmembernames,includedescriptorclasses class * { 
    | native <methods>; 
    |} 
    | 
    |-keepclassmembers,allowoptimization enum * { 
    | public static **[] values(); 
    | public static ** valueOf(java.lang.String); 
    |} 
    | 
    |-keepclassmembers class * implements java.io.Serializable { 
    | static final long serialVersionUID; 
    | private static final java.io.ObjectStreamField[] serialPersistentFields; 
    | private void writeObject(java.io.ObjectOutputStream); 
    | private void readObject(java.io.ObjectInputStream); 
    | java.lang.Object writeReplace(); 
    | java.lang.Object readResolve(); 
    |} 
    """.stripMargin 

proguardSettings 

lazy val skedaddleCore = (project in file(".")). 
    settings(BuildSettings.buildSettings: _*). 
    settings(
    name := "core", 
    resolvers := Resolvers.all, 
    libraryDependencies ++= commonDependencies, 
    merge in Proguard := true, 
    proguardVersion in Proguard := "5.2.1", 
    options in Proguard --= Seq("-dontnote", "-dontwarn", "-ignorewarnings"), 
    options in Proguard ++= Seq("-verbose", "-dontshrink"), 
    options in Proguard += keepClasses 
) 

回答

0

我終於得到了插件來做我想要的以下配置。

import sbt.Keys._ 
import com.typesafe.sbt.SbtProguard._ 

lazy val commonDependencies = Seq(
    Dependencies.Libraries.junit, 
    Dependencies.Libraries.springBootLogging, 
    Dependencies.Libraries.scalaMock, 
    Dependencies.Libraries.joda, 
    Dependencies.Libraries.scalaTestPlus, 
    Dependencies.Libraries.scalaXml, 
    Dependencies.Libraries.commonsCodec, 
    Dependencies.Libraries.typeSafeConfig 
) 

proguardSettings 

ProguardKeys.proguardVersion in Proguard := "5.2.1" 

ProguardKeys.options in Proguard ++= Seq("-dontnote", "-dontwarn", "-ignorewarnings") 

ProguardKeys.inputs in Proguard <<= (dependencyClasspath in Compile) map { _.files } 

ProguardKeys.filteredInputs in Proguard <++= (packageBin in Compile) map ProguardOptions.noFilter 

val keepClasses = 
    """ 
    |-keepparameternames 
    |-keepattributes Exceptions,InnerClasses,Signature,Deprecated, 
    |    SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 
    | 
    |-keep,includedescriptorclasses interface com.** { 
    | <methods>; 
    |} 
    """.stripMargin 

ProguardKeys.options in Proguard += keepClasses 

lazy val skedaddleCore = (project in file(".")). 
    settings(BuildSettings.buildSettings: _*). 
    settings(
    name := "core", 
    resolvers := Resolvers.all, 
    libraryDependencies ++= commonDependencies 
) 
相關問題