Proguard w dużej aplikacji sieciowej Maven + Spring 3
Cały dzień próbowałem zaciemnić rozwijaną przez nas aplikację internetową (pozwolimy dużym klientom hostować ją na swoich serwerach), a po surfowaniu, wyszukiwaniu i próbowaniu dużo nie jestem w stanie zmniejszyć liczby otrzymywanych błędów: „było 7283 nierozwiązanych odniesień do klas lub interfejsów”
Zacząłem od 20K, więc udało mi się poprawić ...
To jest pom config, którego używam:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>4.8</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<configuration>
<obfuscate>true</obfuscate>
<includeDependency>true</includeDependency>
<options>
<option>-target 1.6</option>
<option>-allowaccessmodification</option>
<option><![CDATA[
-keep public class * {
public <init>(...);
public void set*(...);
public void init*(...);
public void close*(...);
public ** get*(...);
public boolean is*(...);
public boolean can*(...);
}
]]></option>
<option><![CDATA[
-keepclassmembers class * {
@javax.inject.Inject *;
@javax.inject.Named *;
@org.springframework.beans.factory.annotation.Autowired *;
@org.springframework.beans.factory.annotation.Qualifier *;
@org.springframework.beans.factory.annotation.Value *;
@org.springframework.beans.factory.annotation.Required *;
}
]]></option>
<option>-keep @org.springframework.stereotype.Service class *</option>
<option>-keep @org.springframework.stereotype.Controller class * </option>
<option>-keep @org.springframework.stereotype.Component class * </option>
<option>-keep @org.springframework.stereotype.Repository class *</option>
</options>
<inFilter>com/proton/**,!com/proton/protocol/**</inFilter>
<injar>${build.warname}.${project.packaging}</injar>
<outjar>${build.warname}-proguarded.${project.packaging}</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<addMavenDescriptor>false</addMavenDescriptor>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
<lib>${java.home}/lib/jsse.jar</lib>
</libs>
<proguardVersion>4.8</proguardVersion>
</configuration>
</plugin>
I duża część dziennika wyników:https://raw.github.com/gist/3708235/37b4cada40fa4742fd1e3ef0f24efd69fa232b28/Proguard
Wydaje się, że przynajmniej duża część błędów pochodzi z bibliotek wiosennych, jestem pewien, że muszę dużo pracować z regułami zachowania, aby naprawić niektóre dynamiczne połączenia, ale będę świetny, jeśli ktoś może pomóc we wszystkich tych błędach.