3

こんにちは、yguard ant タスクを使用してプロジェクトを難読化しています。Java クラスの名前を変更し、Spring xml ファイル内の対応する Bean とうまくいきますが、getter メソッドと setter メソッドも Java で名前が変更されるため、Spring インジェクションのプロパティ名が一致しません。 ..だから私は先に進むことができません。セッターとゲッターだけを難読化から除外する方法を教えてもらえますか?

4

1 に答える 1

3

YGuard はこの部分はあまり得意ではありませんが、ProGaurd を試してみませんか?

ProGaurd の例のセクション ( http://proguard.sourceforge.net/index.html#manual/examples.html ) を参照できます。

Bean クラスの処理

アプリケーション、アプレット、サーブレット、ライブラリなどで、Bean クラスのイントロスペクションを広範囲に使用して、Bean エディター クラス、または getter メソッドと setter メソッドを見つける場合、構成が面倒になる可能性があります。Bean クラス名、または getter と setter の名前が変更されないようにする以外にできることはあまりありません。例えば:

-keep public class mypackage.MyBean {
    public void setMyProperty(int);
    public int getMyProperty();
}

-keep public class mypackage.MyBeanEditor

要素が多すぎて明示的に一覧表示できない場合は、クラス名とメソッド シグネチャにワイルドカードを使用すると役立つ場合があります。この例では、パッケージ mybeans 内のクラスで可能なすべてのセッターとゲッターを網羅する必要があります。

-keep class mybeans.** {
    void set*(***);
    void set*(int, ***);

    boolean is*(); 
    boolean is*(int);

    *** get*();
    *** get*(int);
}

「***」ワイルドカードは、任意のタイプ (プリミティブまたは非プリミティブ、配列または非配列) に一致します。'int' 引数を持つメソッドは、リストであるプロパティと一致します。

また、アプリケーションで注釈も使用する場合:

リソース注入の処理

アプリケーションが Java EE スタイルのリソース インジェクションを使用している場合、アプリケーション コンテナは、リソース クラスのインスタンスを、@Resource アノテーションが付けられたフィールドとメソッドに自動的に割り当てます。コンテナーは、プライベート クラス メンバーに直接アクセスする場合でも、イントロスペクションを適用します。通常、型名とクラス メンバー名に基づいてリソース名を作成します。次に、そのようなクラス メンバーが削除されたり、名前が変更されたりしないようにする必要があります。

-keepclassmembers class * {
    @javax.annotation.Resource *;
}

Spring フレームワークには、別の同様のアノテーション @Autowired があります。

-keepclassmembers class * {
    @org.springframework.beans.factory.annotation.Autowired *;
}
于 2012-07-04T10:30:48.903 に答える