当前位置: 首页 > 知识库问答 >
问题:

sbt前卫,第2.2局。3.

许庆
2023-03-14

我们使用Play2.2开发了一个web应用程序。我想把它弄糊涂。我正在尝试使用sbt proguard插件。我把下面的行放到PROJECT_文件夹/PROJECT/plugins。sbt文件

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

并将下面的行放入PROJECT_文件夹/构建。sbt文件

proguardSettings

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

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

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

当我在游戏机上说dist,在插件网站上说call-proguard:proguard时,我不确定proguard是否起作用。当我在游戏控制台上编写proguard:proguard时,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 framework一起使用?

共有1个答案

印辉
2023-03-14

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

我没有将模糊处理作为构建部分,而是打开了由activator dist生成的zip文件,对jar进行了模糊处理,并将其返回到具有相同名称的lib文件夹中。以下是如何做到这一点:

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

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

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

>

keep—需要保留其名称的任何包名称、类、方法或字段。您应该在webapp中保留的常见内容:

3.1.控制器方法名称。

3.2.由play使用并在application.conf中指定的任何类,如错误处理程序、应用程序加载程序

3.3.所有路由器生成的类

库-包括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复制回其旧目录和名称后,您可以压缩回您的项目,您就得到了一个模糊处理的play项目!

编辑:

我真的建议看一下proguard手册。它有许多不同项目设置和框架的示例。

 类似资料:
  • 2.2.1 clone 源码。 git clone https://github.com/expressjs/express.git 2.2.2 查看 package.json 文件 查看 package.json 文件是为了确定该项目的依赖,特别是 dependencies 里面的,这里面保存的是运行依赖,你必须要把这些包是干什么用的弄清楚!,而 devDependencies 通常是测试tes

  • 所以,OWL/Protégé有一点我不太明白: 假设我有一个类,它是一个枚举类,只包含个人和。然后,我创建了第三个单独的,并将其声明为类型。如果我现在启动一个推理器,我希望它能在所有(或至少一些)的印第安人之间推断出一个。事实并非如此,我用隐士和颗粒推理器进行了测试。 如果我明确指出这三个人彼此不同,本体就会变得不一致。有谁能告诉我,为什么在第一个案例中,这些人在保护区中没有出现?

  • Guard允许您使用简单优雅的代码写出断言代码。守卫是可拓展的。 实用函数 That 通过That可以获取守卫实例,这样您可以使用扩展函数为守卫进行扩展。 var guard = Guard.That; Requires 验证条件并在条件失败时抛出异常。 Guard.Requres<ArgumentNullException>(arg != null, $"Argument {nameof(ar

  • SBT无法解析deadbolt的一个依赖项:。 的内容: 的内容: 这可能是由于play-java在Typesafe存储库中丢失或移动了吗?这是http://repo.Typesafe.com/Typesafe/webapp/browserepo.html?0&pathid=ivy-release:com.Typesafe.sbteclipse上的Typesafe存储库浏览器的屏幕截图

  • 防护是我们可以用来增加模式匹配能力的结构。 使用警卫,我们可以对模式中的变量执行简单的测试和比较。 guard语句的一般语法如下 - function(parameter) when condition -> Where, Function(parameter) - 这是保护条件中使用的函数声明。 Parameter - 通常保护条件基于参数。 Condition - 应该评估的条件,以查看是否

  • 1、css长度单位 (em,rem,vw,vh,px) 2、css实现一个高度随着宽度的变化而变化的正方形。vw,vh 3、判断数据类型。constructor, typeof, instanceof, prototype.tostring。null的判断直接用=== 4、__proto__和prototype的区别。protot是当前对象的原型对象;prototype是当前构造函数的原型对象 5