2009-07-12 15 views
14

Estoy usando ProGuard para ocultar mi código. Mi proyecto se compone de algunos módulos, cada uno ofuscado de forma independiente.Método de ofuscación con la cláusula throws

Una biblioteca incluye una interfaz;

public interface IFace { 
    public int methodA(boolean b) throws CustomException; 
} 

Otra biblioteca proporciona un implmentation

public class IFaceImpl implements IFace { 
    @Override 
    public int methodA(boolean b) throws CustomException { 
     return 0; 
    } 
} 

la biblioteca con la interfaz se construye primero, y la segunda está construido en la versión ofuscado. Lamentablemente, la compilación falla en el @Override ya que la interfaz no tiene la cláusula throws.

Tengo protección manteniendo la interfaz y todos sus miembros, pero no puedo entender cómo mantener la cláusula throws.

Respuesta

35

Me di cuenta.

-keepattributes Exceptions

+0

Gracias! Esto fue un desperdicio de vida sin tu respuesta. – Sileria

+0

Gran ahorro de tiempo. Gracias. – dazed

0

Ejemplo con Maven:

<plugin> 
    <groupId>com.github.wvengen</groupId> 
    <artifactId>proguard-maven-plugin</artifactId> 
    <version>2.0.6</version> 
    <dependencies> 
     <dependency> 
      <groupId>net.sf.proguard</groupId> 
      <artifactId>proguard-base</artifactId> 
      <version>4.10</version> 
     </dependency> 
    </dependencies> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>proguard</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <proguardVersion>4.10</proguardVersion> 
     <options> 
      <option>-keepattributes Exceptions</option> 
      <option>-keep public class some.package.SomeClass{*;}</option> 
     </options> 
     <libs> 
      <lib>${java.home}/lib/rt.jar</lib> 
      <lib>${java.home}/lib/jce.jar</lib> 
      <lib>${java.home}/lib/jsse.jar</lib> 
     </libs> 
    </configuration> 
</plugin> 
Cuestiones relacionadas