2016-11-18 95 views
2

我有一個項目是另一個項目的一部分。我正在使用maven構建過程來製作項目的jar包。我用ProGuard來混淆它。我有一些處理UI請求的控制器。ProGuard:混淆瓶子不工作,但未混淆罐子正在工作

問:我的問題是un-obfuscated jar正在工作。所有控制器都被擊中,但混淆的jar不工作(沒有控制器被擊中)。混淆的問題是什麼?

我servlet.xml中:

<context:component-scan base-package="myPackage.controllers" /> 
<mvc:annotation-driven /> 

樣品控制器代碼:與ProGuard的

​​

我的pom.xml的內容:

<plugin> 
    <groupId>com.github.wvengen</groupId> 
    <artifactId>proguard-maven-plugin</artifactId> 
    <version>2.0.13</version> 
    <dependencies> 
     <dependency> 
      <groupId>net.sf.proguard</groupId> 
      <artifactId>proguard-base</artifactId> 
      <version>5.2.1</version> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>proguard</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <maxMemory>576m</maxMemory> 
     <obfuscate>true</obfuscate> 
     <!-- File with proguard configuration --> 
     <proguardInclude>${basedir}/proguard.conf</proguardInclude> 
     <libs> 
      <lib>${java7home}/jre/lib/rt.jar</lib> 
      <lib>${java7home}/jre/lib/jce.jar</lib> 
     </libs> 
    </configuration> 
</plugin> 

我ProGuard.conf文件內容:

-dontnot 
-dontwarn 
-dontshrink 
-dontoptimize 
-keep public class * { public protected *;} 
-keep class myPackage.controllers.** { public protected *;} 
-keepattributes SourceFile,Signature,LineNumberTable,Exceptions, *Annotation* 
-keepparameternames 
-printmapping '${logFilesPath}/${project.artifactId}.log' 

我檢查了我的混淆jar,所有註釋都被保留。 另外在我的信息包中,我還有一些只有包級別訪問的類。所以那些也被混淆了。但是,所有具有RequestMappings的類都是公共的,並且不會被混淆。

我的運行環境:

1)的Java 1.7爲我的項目。 5.2.1

3)彈簧:4.0.9

4)傑克遜:1.9.11

但這個罐子是越來越放在項目,該項目於Java 1.8

2)ProGuard的版本上運行

:取消ofuscated罐子是工作,但混淆不在上述環境中工作)

+0

當混淆的jar啓動時你收到任何錯誤嗎?你是否收到超時? – Zymus

+0

沒有。它只是說閱讀和閱讀,然後準備輸出jar。我錯過了什麼?另外它需要.m2文件夾中的一些罐子。 – SuhasD

回答

3

我需要添加以下的ProGuard.conf文件

-keepdirectories 

默認情況下在混淆處理中刪除目錄條目。這樣做是爲了減小罐子的大小。當我使用Spring的「組件掃描」功能(可能需要目錄結構)時,我需要保持它正常工作。

+0

我只是想深入研究'ClassPathBeanDefinitionScanner',並猜測你的提示爲我節省了很多時間。謝謝 - 它現在有效。 –