2

プロジェクトを難読化した後、このエラーが発生します。eventghout 実装クラス com.company.project.faab のみが修飾されています@Component("myImpl")

java.lang.IllegalStateException: Bean クラス [com.company.project.faab] の注釈で指定された Bean 名 'myImpl' は、同じ名前とクラス [com.company.project.faaa] の既存の互換性のない Bean 定義と競合します。

spring がインターフェイスと実装の両方に同じ名前を付ける理由がよくわかりません。私のProguard構成に何か問題があるのでしょうか?

4

4 に答える 4

3

あなたが試すことができるのは、オプションを介してプロガードにそうするように指示することによって@Componentクラスを維持することです。as is-keep

proguarg maven プラグインを使用する場合、このオプションを次のように設定できます。

<plugin>
    ... ...
    <artifactId>proguard-maven-plugin</artifactId>
    ... ...
    <configuration>
        <obfuscate>true</obfuscate>
        <options>
            ... ...
            <option>-keep @org.springframework.stereotype.Component class *</option>
            ... ...
        </options>
        ... ...
    </configuration>
</plugin>

コンポーネントのリバースエンジニアリングとSpringフレンドリーを維持し@Componentます:)

于 2012-05-01T16:21:31.117 に答える
2

問題の原因を見つけました。オプティマイザーが有効になっている場合、Proguardはインターレースを実装とマージします。

追加した

-dontoptimize

そして問題は解決されます

于 2012-05-04T15:29:07.233 に答える
0
for @Component
 <option>-keep @org.springframework.stereotype.Component class *</option>
for @Controller
 <option>-keep @org.springframework.stereotype.Controller class *</option> 
for @Service
 <option>-keep @org.springframework.stereotype.Service class *</option> 
于 2017-04-12T01:10:17.220 に答える
0

クラスを移動した場合、存在しない場合でも、古いクラスを参照している場合に問題が発生することがあります。

この場合、これを行うだけです:

mvn eclipse:clean

mvn eclipse:eclipse

これは私にとってはうまくいきました。

于 2019-05-03T11:28:33.490 に答える