如何在proguard混淆步骤中保持JAXB生成的类文件“package-info.class”

时间:2011-05-04 13:38:22

标签: xml jaxb proguard

我有一个问题,我有一些JAXB生成的java文件,其间有众所周知的“package-info.java”,它只包含2行代码,注释和包定义:

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

现在,在编译时,这个文件生成一个普通的.class文件,但是当我试图对它进行模糊处理时,proguard不会将它添加到模糊的output.jar中,我想这是因为它不包含任何类或其他东西而且没有其他java文件引用它。 我已经尝试了一些proguard选项来解决问题,但没有一个是好的:

-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);
}

现在我只需要一些选项来明确告诉proguard不要混淆我想要的文件,但只是将它添加到output.jar中,我该怎么做? 请记住,“keep class * {}”之类的选项不起作用,因为该文件不包含任何类。 感谢任何人的回答,请完成写 FORZA NAPOLI的消息!

1 个答案:

答案 0 :(得分:4)

就ProGuard而言,编译的类是一个类似于任何其他类的类。默认情况下,ProGuard会丢弃它,因为它没有被使用(内省除外)。你可以保留:

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

正如您所注意到的,您可能也希望在此类上保留注释:

-keepattributes *Annotation*