名前で春@Autowiredを使用してライブラリとProGuardのを使用して
-
25-09-2019 - |
質問
私はいくつかの@Autowiredフィールドを持つライブラリを難読化するProGuardのを使用しています。 (彼らはプライベート/クラスの内部にあるため)難読化ツールは、これらのクラスフィールドの名前を変更されたので、私の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;
...
}
今おそらく、これらの特定のフィールドを作る方法がたくさんautowiredしかし、私は見つけることを望んでいたことが重要春ISMS(@Autowired、でアノテートされているすべての内部フィールドを難読化しないようにProGuardのを指示する方法だっ取得されていませんなど。)。
誰ですか?私は一般的にこれを行うことができますどのようにアイデアを持っている。
グラント
解決 2
私はこの私の質問、まだこの問題へのエレガントな、汎用ソリューションたいと正しい答えは考えていません。私が投稿していすると、ほとんどのブルートフォース、無粋な方法で自分の問題を過ぎて私を得た私の一時的な回避策です。
私は明示的にkeepclassmembernamesオプションにそれらを追加することによって、難読化からこれらの項目を除外します:
<option>-keepclassmembernames class * {com.common.license.LicenseSessionStore licenseSessionStore; com.common.license.LicenseStore licenseStore; }</option>
それはそれぞれ、すべてのクラスでオーバーライドという名前の特定を必要とし、メンテナンスの悪夢になるように、これは好ましい解決策ではありません。
より良い答えをまだ必要とされている!
グラント
他のヒント
私はSimpleXMLの注釈付きのクラスのクラス名を保持同様の問題がありました。私の修正は、以下を追加しました:
-keepclassmembers class * {
@org.simpleframework.xml.* *;
}
私は似た何かがあなたのために働くだろうと思います:
-keepclassmembers class * {
@org.springframework.beans.factory.annotation.* *;
}
所属していません StackOverflow