sbt-proguard 与 play 2.2.3

2024-05-02

我们使用 play 2.2.3 开发了一个 Web 应用程序,并希望对其进行混淆。我正在尝试使用sbt-proguard https://github.com/sbt/sbt-proguard插入。我把下面的行PROJECT_FOLDER/project/plugins.sbt file

addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")

并将下面的行放入PROJECT_FOLDER/build.sbt file

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 是否正在工作dist在游戏控制台和插件网站上他们说调用混淆器:混淆器。当我写作时混淆器:混淆器在 Play 控制台上,Play 给我错误,如下所示

[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框架吗?


在花了几天时间尝试正确配置 sbt-proguard 后,我放弃了,只是在构建项目后使用了 proguard。

我没有将混淆作为构建部分,而是打开了由activator dist,混淆了 jar 并将其返回到同名的 lib 文件夹中。操作方法如下:

Proguard 可以独立运行。您只需从以下位置下载 tar 文件即可来源锻造 http://sourceforge.net/projects/proguard/files/并用 a 运行 jar配置文件 like:

java -jar /path/to/proguard/lib/proguard.jar @CONF_FILE

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

  1. injar - 罐子被混淆 -
    解压由 dist 创建的 zip 文件后,cd 进入 lib 文件并找到 jar 名称 YOUR_PROJECT.VERSION-sans-externalized.jar,这是您需要混淆的 jar。
  2. outjar - 混淆后的 jar 的路径(输出)。在该过程结束时,只需将此 jar 复制回 lib 目录并将其重命名为 in jar 的名称。

  3. keep - 任何需要保留其名称的包名称、类、方法或字段。您应该在网络应用程序中保留的常见内容:

    3.1.控制器方法名称。

    3.2. play 使用并在 application.conf 中指定的任何类,例如 ErrorHandler、ApplicationLoader

    3.3.所有路由器生成的类

  4. 库 - 包含 lib 文件中除您自己的 jar 之外的所有库。

所以你的conf.pro文件应该是这样的:

-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 复制回其旧目录和名称后,您可以压缩回您的项目,并且您已经得到了一个混淆的播放项目!

EDIT:

我真的建议看看混淆器手册 http://proguard.sourceforge.net/manual/。它有许多不同项目设置和框架的示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sbt-proguard 与 play 2.2.3 的相关文章

随机推荐

  • SQL Server - 评估期已过期错误

    昨天我的电脑上安装的 SQL Server 2014 试用期结束了 我决定使用 Express 版本并卸载 SQL Server 2014 并安装 Express 版本 但是当我打开SQL Server Management Studio时
  • 如何从网络客户端获取状态码?

    我正在使用WebClient类将一些数据发布到 Web 表单 我想获取表单提交的响应状态代码 到目前为止我已经找到了如果出现异常如何获取状态代码 Catch wex As WebException If TypeOf wex Respons
  • 如何使用 Angular2 数据表

    找不到任何使用教程angular2 data table图书馆在这里 https github com swimlane angular2 data table https github com swimlane angular2 data
  • 传递到 mvn exec:java 时保留参数间距等

    我有一个启动 Maven exec java 进程的 shell 脚本 exec mvn exec java Dexec mainClass Dexec args 现在可悲的是如果我跑步 myMagicShellScript arg1 ar
  • 比较字符串结尾的最佳方法是使用 RIGHT、LIKE 还是其他?

    我需要将字符串的结尾与存储过程中可能的结尾列表进行比较 会被叫很多 大概有10 15个候选结局 此时 仅使用代码的解决方案比创建专用于此的表更好 类似的东西 IF ENDSWITH var foo OR ENDSWITH var bar O
  • Android 支持 React Native 的 LayoutAnimation 吗?

    我没有看到文档中的任何内容 https facebook github io react native docs layoutanimation html指的是缺乏对Android的支持 我正在使用一个简单的预设动画 LayoutAnima
  • 如何使用 AVFoundation 组合不同方向的视频剪辑

    我正在尝试使用 AVFoundation 将多个视频剪辑合并为一个 我可以使用下面的代码使用 AVMutableComposition 创建单个视频 AVMutableComposition composition AVMutableCom
  • SpringBoot @OneToMany 与 Lombok 无限循环

    我的项目使用SpringBoot 它具有双向映射 OneToMany Entity Table name T S Getter Setter EqualsAndHashCode NoArgsConstructor AllArgsConstr
  • Hibernate中通过ID获取对象

    我注意到我们的高级开发人员使用以下代码通过 ID 检索实体 Override public Source get Long id Session session getSession if session null session sess
  • 将数组分成两半,数组总和相等或近似相等

    Problem 具有数值的数组需要分成两半 数组总和大约相等或可能相等 数组中元素的数量或顺序并不重要 probabilites array 0 4 0 15 0 1 0 1 0 2 0 2 0 3 1 45 probabilites 0
  • Stopwatch.ElapsedTicks 线程安全吗?

    如果我有一个共享的System Diagnostics Stopwatch实例 可以多线程调用shared ElapsedTicks以安全的方式并获得准确的结果 以这种方式使用 Stopwatch 的共享实例与使用静态GetTimeStam
  • Foldl 是否比其严格的表亲 Foldl' 更好?

    Haskell 有两个列表左折叠函数 foldl 以及 严格 版本 foldl 不严格的问题foldl是它建造了一座重击塔 foldl 0 1 5 gt 0 1 2 3 4 5 gt 15 这会浪费内存 并且如果列表中的项太多 可能会导致堆
  • 如何检查 flutter web 应用程序中的元素。如何在 Flutter Web 应用程序中进行自动化测试

    在此输入图像描述 https i stack imgur com SN4rr png 我正在尝试检查元素 但它没有响应 任何人都可以建议如何在 flutter web 应用程序中进行自动化测试 或者 建议任何其他测试工具支持 flutter
  • 自动执行将制表符分隔文件中的值乘以 -1 来求反的过程

    我一直在 Excel 中手动处理大量文件 我已经进行了一些搜索 但还没有找到关于如何以自动化方式实现此过程的明确最佳实践 我的手动流程如下 我有一个 tab 制表符分隔 文件 每行总共有 8 个 列 我需要对每行最后 5 列的数值求负 我一
  • 使用 ActionBar 选项卡进行导航时菜单会折叠

    我已经使用支持库中的 ActionBar 来将我的应用程序构建为选项卡式导航栏 我的应用程序中有两个选项卡 这两个片段都有菜单 并且有一个菜单项 我想将其显示为操作栏中的一项操作 但由于某种原因 显示了溢出图标 而不是分配给这些项目的图标
  • 如何确定现在(UTC)是否在 ISO 8601 格式的给定星期几和一天中时间的范围内

    我遇到了如何确定是否DateTime UtcNow 例如 2018 01 01T20 00 00Z 属于另一个时区的给定日期和时间范围内 没有给出具体日期 只是一周中的几天和一天中的时间 给定时间采用 ISO 8601 标准格式 为了简化这
  • 如何在 div 标签上添加带边框的三角形

    我有一个 div 标签 我想在它上面添加一个小三角形 注意 我希望我的 div 标签具有某种颜色的边框 以及另一种颜色的 div 主体 假设我的 div 背景为白色 边框为蓝色 请看这个 http fiddle jshell net pau
  • JPA 2.0 API Maven 工件

    我正在使用 JPA 2 0 我的持久性提供程序是 Hibernate 但是 我只想包含 javax 中的标准 API 但在中心 没有 2 0 工件 我目前正在使用 Hibernate JPA 2 0 工件 但我想使用更标准的东西 这可能吗
  • mongodb 中的条件更新

    我有以下架构 需要进行更新 详细信息如下 不知道该怎么做 UserPromo new Schema sendFBInvite earnedIntros type Number default 0 earningActionCounter t
  • sbt-proguard 与 play 2.2.3

    我们使用 play 2 2 3 开发了一个 Web 应用程序 并希望对其进行混淆 我正在尝试使用sbt proguard https github com sbt sbt proguard插入 我把下面的行PROJECT FOLDER pr