Proguard in einer großen Maven + Spring 3-Webanwendung

Ich habe den ganzen Tag versucht, die von uns entwickelte Webanwendung zu verschleiern (wir werden großen Kunden erlauben, sie auf ihren Servern zu hosten), und nach dem Surfen, Suchen und vielen Versuchen kann ich die Anzahl der Fehler, die ich erhalte, nicht reduzieren: "Es gab 7283 ungelöste Verweise auf Klassen oder Interfaces"

Ich habe von 20K angefangen, also habe ich es geschafft, ein paar Verbesserungen zu bekommen ...

Dies ist die POM-Konfiguration, die ich verwende:

<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>

Und ein großer Teil des Ergebnisprotokolls:https://raw.github.com/gist/3708235/37b4cada40fa4742fd1e3ef0f24efd69fa232b28/Proguard

Es scheint, dass zumindest ein großer Teil der Fehler aus Spring-Bibliotheken stammt. Ich bin sicher, dass ich viel mit Keep-Regeln arbeiten muss, um einige dynamische Aufrufe zu korrigieren, aber ich wäre großartig, wenn jemand bei all diesen Fehlern helfen könnte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage