2012-01-02 2 views
4

proguard-maven-plugin으로 프로젝트를 obsfucating하고 있습니다. 한 가지를 제외하고는 모두 잘 작동합니다. 대상 디렉토리 나 저장소에 배포하지 않고 원래의 jar 파일을 원하지 않습니다. 그 순간 나는 orignal jar와 obsfucated jar를 얻습니다. 이 방법으로두면 아티팩트가 배포되어 클래스 패스에 중복 인터페이스가 생성되므로 빌드 서버에서 문제가 발생할 수 있습니다. buildserver에서 블랙리스트를 사용하는 것은 옵션이 아닙니다.Maven, Proguard 및 jar 원하지 않는 경우

아이디어가 있으십니까?

감사합니다.

답변

0

당신은 단지 injar를 지정해야하고 outjar 매개 변수는 같은 병을 지적, 난독 화는 원래 병보다 우선합니다.

내 난독 설정 (자바 6이 설정 자바 7 따라서, 그룹 ID, 버전 및 artifactId를 변경)

<plugin> 
    <groupId>com.pyx4me</groupId> 
    <artifactId>proguard-maven-plugin</artifactId> 
    <version>2.0.4</version> 
    <executions> 
     <execution> 
      <phase>process-classes</phase> 
      <goals> 
       <goal>proguard</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <obfuscate>true</obfuscate> 
     <includeDependency>false</includeDependency> 
     <injar>classes</injar> 
     <maxMemory>512m</maxMemory> 
     <libs> 
      <!-- dependency jar here --> 
     </libs> 
     <options> 
      <option>-keepattributes *Annotation*</option> 
      <option>-allowaccessmodification</option> 
      <option>-dontskipnonpubliclibraryclasses</option> 
      <option>-dontskipnonpubliclibraryclassmembers</option> 
      <option>-dontusemixedcaseclassnames</option> 
      <option>-dontshrink </option> 
     </options> 
    </configuration> 
    <dependencies> 
     <dependency> 
      <groupId>net.sf.proguard</groupId> 
      <artifactId>proguard</artifactId> 
      <version>4.4</version> 
      <scope>runtime</scope> 
     </dependency> 
    </dependencies> 
</plugin> 

HTH.

+0

"and"매개 변수는? 나는 이것을 어디서든지 보지 않는다, 당신은 조금 더 구체적 일 수 있었느냐? – decal

+0

@decal : 업데이트 된 대답, "<>"태그가 무시되었으므로 ' 매개 변수 사용'이라고 써 있었지만 'use and parameter'로 표시되었습니다. – Thinhbk

0

는 다음과 같은 구성 나를 위해 일했다. 이렇게하면 원래 항아리의 이름이 {final name} _proguard_base.jar로 바뀌고 처리 된 항아리로 프로젝트 항아리가 대체됩니다.

 <plugin> 
       <groupId>com.github.wvengen</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <version>2.0.6</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>proguard</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <proguardVersion>${proguard.version}</proguardVersion> 
        <obfuscate>false</obfuscate> 
        <injarNotExistsSkip>true</injarNotExistsSkip> 
        <injar>${project.build.finalName}.jar</injar> 
        <outputDirectory>${project.build.directory}</outputDirectory> 
        <addMavenDescriptor>true</addMavenDescriptor> 
        <attach>false</attach> 
        <libs> 
         <lib>${java.home}/lib/rt.jar</lib> 
         <lib>${java.home}/lib/jsse.jar</lib> 
         <lib>${java.home}/lib/jce.jar</lib> 
        </libs> 
        <proguardInclude>${project.basedir}/proguard.conf</proguardInclude> 
        <options> 
         <option>-printseeds ${project.build.directory}/proguard-seeds.txt</option> 
         <option>-printusage ${project.build.directory}/proguard-shrinkusage.txt</option> 
         <option>-printmapping ${project.build.directory}/proguard-mapping.txt</option> 
         <option>-printconfiguration ${project.build.directory}/proguard-config.txt</option> 
         <option>-dontobfuscate</option> 
         <option>-keepdirectories</option> 
         <option>-dontskipnonpubliclibraryclasses</option> 
         <option>-dontskipnonpubliclibraryclassmembers</option> 
        </options>     
       </configuration> 
       <dependencies> 
        <dependency> 
         <groupId>net.sf.proguard</groupId> 
         <artifactId>proguard-base</artifactId> 
         <version>${proguard.version}</version> 
        </dependency> 
       </dependencies> 
      </plugin>