как сохранить файл класса package-info.class, сгенерированный JAXB на этапе обфускации proguard

У меня проблема, у меня есть несколько java-файлов, сгенерированных JAXB, между которыми есть хорошо известный "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 как есть, как я могу это сделать? Имейте в виду, что такие параметры, как «сохранить класс * {}», не работают, потому что файл не содержит никакого класса. Спасибо всем за ваши ответы и, пожалуйста, завершите свои сообщения, написав FORZA NAPOLI!


person BitRider    schedule 04.05.2011    source источник
comment
Хорошо, я нашел грязное решение, но пока оно работает. Я определил фиктивный класс package-private в package-info.java и добавил класс -keep * в свой файл конфигурации proguard. ФОРЗА НЕАПОЛЬ!   -  person BitRider    schedule 04.05.2011


Ответы (1)


Что касается ProGuard, скомпилированный класс — это такой же класс, как и любой другой. Однако по умолчанию ProGuard отбрасывает его, так как он не используется (кроме самоанализа). Вы можете сохранить его с помощью:

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

Как вы заметили, вы, вероятно, захотите сохранить аннотацию и для этого класса:

-keepattributes *Annotation*
person Eric Lafortune    schedule 04.05.2011
comment
О да работает!!! Не знаю, почему я не подумал об этом! Спасибо... даже если вы не написали FORZA NAPOLI! ;о) - person BitRider; 06.05.2011