首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sbt-使用2.2.3的前卫

sbt-使用2.2.3的前卫
EN

Stack Overflow用户
提问于 2014-07-10 07:06:50
回答 1查看 1.7K关注 0票数 7

我们用play 2.2.3开发了一个web应用程序,并想混淆它。我正在尝试使用sbt-保护插件。我把下面的行放到PROJECT_FOLDER/project/plugins.sbt文件中

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

并将下面的行放到PROJECT_FOLDER/build.sbt文件中

代码语言:javascript
复制
proguardSettings

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

ProguardKeys.options in Proguard += ProguardOptions.keepMain("Application")

inConfig(Proguard)(javaOptions in ProguardKeys.proguard := Seq("-Xmx2g"))

我不确定当我在游戏控制台和插件网站上说proguard:proguard.的时候,是否在工作当我在播放控制台上编写proguard:proguard时,play给出了以下错误

代码语言:javascript
复制
[info] Reading program jar [/Users/kamil/DEVELOPMENT/play-2.2.3/repository/local/net.sf.ehcache/ehcache-core/2.6.6/jars/ehcache-core.jar] (filtered)
[info] Reading program jar [/Users/kamil/DEVELOPMENT/play-2.2.3/repository/cache/org.json/json/jars/json-20140107.jar] (filtered)
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/jce.jar]
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/rt.jar]
[error] Error: The output jar is empty. Did you specify the proper '-keep' options?
[trace] Stack trace suppressed: run last proguard:proguard for the full output.
[error] (proguard:proguard) Proguard failed with exit code [1]
[error] Total time: 35 s, completed 10.Tem.2014 09:45:23

是否有人成功地使用了这个带有play框架的插件?

EN

回答 1

Stack Overflow用户

发布于 2016-10-25 19:04:54

在燃烧了几天的时间试图使sbt保护配置正确后,我放弃了,只是在构建项目之后使用了proguard。

我没有将混淆作为构建部分,而是打开了activator dist生成的zip文件,混淆了jar并以相同的名称返回到lib文件夹中。以下是如何做到这一点:

护卫可以自己跑。您只需从sourceforge下载tar文件,并使用配置文件运行jar,如下所示:

代码语言:javascript
复制
java -jar /path/to/proguard/lib/proguard.jar @CONF_FILE

现在,对于配置文件,您需要指定:

  1. 他-把罐子弄糊涂了- 在将由dist创建的zip文件解压缩后,cd进入lib文件,并找到jar名称您的_PROJECT.VERSION-sans-exteralized.jar-这是您需要混淆的jar。
  2. outjar -模糊jar的路径(输出)。在流程结束时,只需将此jar复制回lib目录并将其重命名为in的名称即可。
  3. 保存-任何需要保留名称的包名、类、方法或字段。常见的事情,你应该保存在一个网络应用程序: 3.1。控制器方法名。 3.2。由play使用并在application.conf中指定的任何类,如ErrorHandler、ApplicationLoader 3.3。所有路由器生成的类
  4. 库-包括库文件中的所有库,除了您自己的jars。

因此,您的conf.pro文件应该喜欢这样的内容:

代码语言:javascript
复制
-injars /path/to/jar/project-version-sans-externalized.jar(!META-INF)
-outjars /path/to/obfuscated/jar.jar


-keepnames class com.example.ErrorHandler
-keepnames class com.example.ApplicationLoader    

-keepnames class controllers.**
-keepclassmembernames class controllers.** {
    <methods>;    
}

-keeppackagenames controllers.**, router.**, views.**
-keep class router.** {*;}
-keepnames class router.** {*;}
-keepclassmembers class router.** {*;}
-keep class views.** {*;}
-keepnames class views.** {*;}
-keepclassmembers class views.** {*;}
-libraryjars /usr/lib/jvm/latest/jre/lib/rt.jar
-libraryjars /path/to/lib/library1.jar
-libraryjars /path/to/lib/library2.jar

在混淆完成并将输出jar复制回其原来的dir和名称之后,您可以将项目拉回,您将得到一个模糊的播放项目!

编辑:

我真的推荐看护卫手册。它为不同的项目设置和框架提供了许多示例。

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

https://stackoverflow.com/questions/24670430

复制
相关文章

相似问题

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