7

私はProguardを使用して、いくつかの@Autowiredフィールドを持つライブラリを難読化しています。難読化ツールはこれらのクラスフィールドの名前を変更しているため(クラスのプライベート/内部であるため)、私のBeanはインスタンス化に失敗しています。

事前に難読化:

@Service
public class LicenseServiceImpl implements LicenseService {

    @Autowired(required = false)
    LicenseSessionStore licenseSessionStore;

    @Autowired(required = false)
    LicenseStore licenseStore;

...
}

難読化後:

@Service
public class LicenseServiceImpl implements LicenseService {

  @Autowired(required=false)
  LicenseSessionStore a;

  @Autowired(required=false)
  LicenseStore b;

...
}

現在、これらの特定のフィールドを自動配線されないようにする方法はたくさんありますが、私が見つけたいと思っていたのは、重要なSpring-ism(@Autowiredなど)で注釈が付けられた内部フィールドを難読化しないようにProguardに指示する方法でした。 。

誰かが私がこれを一般的にどのように行うことができるかについての考えを持っていますか?

許す

4

2 に答える 2

2

これは私の質問に対する正しい答えではないと思いますが、この問題に対するエレガントで一般的な解決策が必要です。私が投稿しているのは、私の一時的な回避策であり、最も暴力的でエレガントな方法で問題を解決しました。

これらの項目を keepclassmembernames オプションに追加することで、難読化から明示的に除外しました。

<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option>

これは、すべてのクラスで特定の名前付きオーバーライドが必要になり、メンテナンスの悪夢になるため、推奨されるソリューションではありません。

より良い答えがまだ必要です!

許す

于 2010-12-10T17:16:25.770 に答える