2013-06-05 2 views
0

com.pyx4me.proguard-maven-plugin을 사용하여 다중 모듈 프로젝트에서 코드를 난독 화합니다. 다른 (모호한) 모듈의 '친구'메소드에 의존하는 모듈을 난독 화하는 방법은 무엇입니까? 기본 모듈에서 모든 것을 유지하려고하지만 종속 모듈에서는 최대한 축소/최적화하고 싶습니다. 나는 'keep *', 'dontptimize'및 'dontshrink'옵션을 다양하게 시도했지만 아무 것도 도움이되지 않습니다. 크로스 게시는 https://groups.google.com/forum/#!topic/pyx4me-users/1auM9xSQkLY입니다.proguard maven 모듈 전체에서 공유되는 패키지 - 전용 멤버의 난독 화

[proguard] Warning: test.Bar: can't find referenced method 'void x()' in class test.Foo 
[proguard] Warning: there were 1 unresolved references to program class members. 
[proguard]   Your input classes appear to be inconsistent. 

/testproj/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>group</groupId> 
    <artifactId>testproj</artifactId> 
    <version>1.0.0.0</version> 
    <packaging>pom</packaging> 

    <name>testproj</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <modules> 
     <module>testproj.a</module> 
     <module>testproj.b</module> 
    </modules> 
</project> 

/testproj/testproj.a/pom :

project file hierarchy

상기 프로젝트 구조는 다음 에러를 산출한다. xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>group</groupId> 
    <artifactId>testproj.a</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 


    <name>testproj.a</name> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <index>true</index> 
         <manifest> 
          <classpathPrefix>lib/</classpathPrefix> 
          <addClasspath>true</addClasspath> 
          <mainClass>com.holliswaite.swmf.FontTableModel</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.2</version> 
       <executions> 
        <execution> 
         <id>copy-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/lib</outputDirectory> 
          <overWriteReleases>true</overWriteReleases> 
          <overWriteSnapshots>true</overWriteSnapshots> 
          <overWriteIfNewer>true</overWriteIfNewer> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>com.pyx4me</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>proguard</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <options> 
         <option>-keep class * {*;}</option> 
        </options> 
        <libs> 
         <lib>${java.home}/lib/rt.jar</lib> 
         <lib>${java.home}/lib/jsse.jar</lib> 
        </libs> 
       </configuration> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard</artifactId> 
         <version>4.8</version> 
         <scope>runtime</scope> 
        </dependency> 
       </dependencies> 
      </plugin> 


     </plugins> 
    </build> 
</project> 

/testproj/testproj.b/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>group</groupId> 
    <artifactId>testproj.b</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>testproj.b</name> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>testproj.a</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <archive> 
         <index>true</index> 
         <manifest> 
          <classpathPrefix>lib/</classpathPrefix> 
          <addClasspath>true</addClasspath> 
          <mainClass>com.holliswaite.swmf.SWMFFrame</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.2</version> 
       <executions> 
        <execution> 
         <id>copy-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/lib</outputDirectory> 
          <overWriteReleases>true</overWriteReleases> 
          <overWriteSnapshots>true</overWriteSnapshots> 
          <overWriteIfNewer>true</overWriteIfNewer> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>com.pyx4me</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>proguard</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <options> 
         <option>-allowaccessmodification</option> 
         <option>-keep public class test.Bar {*;}</option> 
        </options> 
        <libs> 
         <lib>${java.home}/lib/rt.jar</lib> 
         <lib>${java.home}/lib/jsse.jar</lib> 
        </libs> 
       </configuration> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard</artifactId> 
         <version>4.8</version> 
         <scope>runtime</scope> 
        </dependency> 
       </dependencies> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

/testproj/testproj.a/src/main/java/test/Foo.java

package test; 

public class Foo { 
    void x() {} 
    public void y() {} 
} 

/testproj/testproj.b/src/main/java/test/Bar.java

package test; 

public class Bar {void z() {(new Foo()).x();}} 

y()에 대한 참조는 정상적으로 작동하지만 x()을 호출하면 오류가 발생합니다.

답변

0

-dontskipnonpubliclibraryclassmembers 옵션 (testproj.b/pom.xml)을 사용하십시오.

관련 문제