2011-05-04 2 views
5

문제점이 있습니다. JAXB에서 생성 된 java 파일 중 잘 알려진 "package-info.java"가 있습니다.proguard 난독 화 단계에서 JAXB에 의해 생성 된 클래스 파일 "package-info.class"를 유지하는 방법

@javax.xml.bind.annotation.XmlSchema(namespace = "http://it.tms.project/input") 
package it.tms.project.jaxb.input; 

지금,이 파일을 컴파일 할 때 보통의 .class 파일을 생성하지만 난 그것을 당황 할 때 난독 화는 난독 출력에 추가하지 않습니다 코드, 주석 및 패키지 정의의 두 줄이 포함되어 있습니다. jar, 어떤 클래스 나 무언가를 포함하지 않으며 다른 java 파일을 참조하지 않기 때문입니다. 나는 문제 없애 일부 난독 화 옵션을 시도했지만이 중 아무도 좋은 없었다 :

-keepparameternames 
-keepattributes Exceptions,InnerClasses,Signature,SourceFile,EnclosingMethod 
-keeppackagenames it.tms.project.jaxb.input 
-dontshrink 
-dontoptimize 

-keepattributes *Annotation* (I thought this one would work but I was wrong) 

-keepclassmembernames class * { 
    java.lang.Class class$(java.lang.String); 
    java.lang.Class class$(java.lang.String, boolean); 
} 

지금 난 그냥 명시 적으로 내가 원하는 파일을 당황하지만 단지 안하는 난독에게 몇 가지 옵션이 필요 있는 그대로 output.jar에 추가하십시오. 어떻게 할 수 있습니까? 파일에 클래스가 없기 때문에 "keep class * {}"와 같은 옵션이 작동하지 않습니다. 답장을 보내 주셔서 감사합니다. 작성한 메시지를 작성해주세요. FORZA NAPOLI!

+0

나는 "더러운 솔루션"하지만 지금 발견했습니다 확인 그것은 작동합니다. package-info.java에서 private 패키지 인 private 클래스를 정의하고 proguard 구성 파일에 "-keep class *"를 추가했습니다. 포자 나폴리! – BitRider

답변

4

ProGuard에 관한 한, 컴파일 된 클래스는 다른 클래스와 마찬가지입니다. ProGuard는 기본적으로 사용하지 않기 때문에 (인트로 스펙을 제외하고) 폐기합니다. 당신이 발견 한 것처럼

-keep class it.tms.project.jaxb.input.package-info 

, 당신은 아마 너무이 클래스에 주석을 유지하려면 : 당신은 그것을 유지할 수

-keepattributes *Annotation* 
+0

오, 그래 작품! 나는 왜 그런 생각을하지 않았는지 모르겠다! 고맙습니다 ... FORZA NAPOLI를 쓰지 않았더라도! ;영형) – BitRider