- java/
- Java 部署ProGuard模糊化jar后未检测到Spring注释
Java 部署ProGuard模糊化jar后未检测到Spring注释
Java 部署ProGuard模糊化jar后未检测到Spring注释,java,spring-mvc,annotations,proguard,obfuscation,Java,Spring Mvc,Annotations,Proguard,Obfuscation,过去3-4天我一直在尝试ProGuard。由于命令行调用将相当长,因此我尝试使用proguardgui
在我了解到默认情况下,注释在模糊处理后被删除之后,我尝试了-keep选项,但输出jar不起作用
所以接下来我尝试禁用所有的处理步骤,比如缩小、模糊、优化和生成jar,但仍然不起作用!我通过反编译输出jar中的类来确认输出jar具有springmvc注释
如果我禁用了所有的处理步骤,那么输出jar应该与输入jar相同,但是我看到当我部署输入jar时,会检测到注释,而当我部署输出jar时,则不会
过去3-4天我一直在尝试ProGuard。由于命令行调用将相当长,因此我尝试使用proguardgui
在我了解到默认情况下,注释在模糊处理后被删除之后,我尝试了-keep选项,但输出jar不起作用
所以接下来我尝试禁用所有的处理步骤,比如缩小、模糊、优化和生成jar,但仍然不起作用!我通过反编译输出jar中的类来确认输出jar具有springmvc注释
如果我禁用了所有的处理步骤,那么输出jar应该与输入jar相同,但是我看到当我部署输入jar时,会检测到注释,而当我部署输出jar时,则不会
朋友们,非常感谢你们的帮助。
如果需要,我将发布示例代码和依赖项以重新创建此问题。
谢谢
--尼勒斯
2015/01/08:
以下是我将遵循的步骤:
我的jar是位于C:/test目录中的xyz.jar
使用MVC web应用程序部署xyz.jar
确认错误日志显示:
信息:正在刷新命名空间的WebApplicationContext
“TestDataImport servlet”:启动日期[Sun Jan 04 19:37:45 IST 2015];
上下文层次结构的根2015年1月4日下午7:37:45
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions信息:从
ServletContext资源[/WEB-INF/TestDataImport servlet.xml]2004年1月,
2015年7:37:46下午
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
registerHandlerMethod信息:已映射
{[/dataimportcontroller/setconfig],方法=[POST],参数=[],头=[],使用=[],产生=[application/json],自定义=[]
打开公共java.lang.String
com.dn.controller.DataImportController.setconfig(java.lang.String[])
2015年1月4日下午7:37:46
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
registerHandlerMethod信息:已映射
{[/dataimportcontroller/insertRegion],方法=[POST],参数=[],头=[],使用=[],产生=[application/json],自定义=[]
进入公共空间
com.dn.controller.DataImportController.insertRegion(java.lang.String)
2015年1月4日下午7:37:47
org.springframework.web.servlet.view.ContentNegotiatingViewResolver
initServletContext
这意味着可以检测到注释,并且可以通过http调用带注释的方法
启动Proguardgui
在“输入/输出”选项卡上,选择“添加输入”,然后选择要混淆的jar文件
在input/Output选项卡上,选择AddOutput directry和输出jar的名称,在我的例子中是C:/temp/xyzob.jar
单击“下一步”转到“收缩”选项卡
取消选中“收缩”复选框,然后单击“下一步”转到“模糊处理”选项卡
取消选中“模糊”复选框,然后单击“下一步”转到“优化”选项卡
取消选中“优化”复选框,然后单击“下一步”转到“信息”选项卡
取消选中“预验证”复选框,然后单击“下一步”转到“流程”选项卡
点击“过程”
使用反编译器并确认注释保存在输出jar中
在mvc web应用程序中,将xyz.jar替换为xyzob.jar
重新部署web应用程序
日志如下所示
信息:正在刷新命名空间的WebApplicationContext
“TestDataImport servlet”:启动日期[Sun Jan 04 19:33:39 IST 2015];
上下文层次结构的根2015年1月4日下午7:33:39
org.springframework.beans.factory.xml.XmlBeanDefinitionReader
loadBeanDefinitions信息:从
ServletContext资源[/WEB-INF/TestDataImport servlet.xml]2004年1月,
2015年7:33:41下午
org.springframework.web.servlet.view.ContentNegotiatingViewResolver
initServletContext
信息:映射消息不存在,这意味着未检测到批注
我的问题是,如果我取消选中所有选项,输入和输出jar应该有相同的内容
请说明您使用的是哪一版本的ProGuard和哪一版本的Java。早期的v5 ProGuard在Java 8.ProGuard 5.1和JDK 1.7中遇到了严重的问题。为了保留一些东西,特别是注释,我使用了以下行:-keepattributes innerclass,SourceFile,LineNumberTable,弃用,Signature,*Annotation*,EnclosingMethod,Exceptions
。注释
周围的星号似乎很重要。看你是对的,这是应该发生的,我看到注释保存在输出jar中,但是没有检测到注释,就像我在查询中所说的。也许发布你正在使用的确切选项是有帮助的。