2012-04-26 126 views
2

現有的,不兼容的bean定義我得到這個錯誤後,我混淆我的項目,eventghout只是我的實現類com.company.project.faab由@Component("myImpl")衝突具有相同名稱和

合格的java .lang.IllegalStateException:註釋指定的bean名稱 用於bean類 的'myImpl'[com.company.project.faab]與現有的,不兼容的 相同名稱和類的bean定義衝突[com.company.project.faaa ]

我不明白爲什麼spring會爲接口和實現同名。這可能是我的Proguard配置有問題嗎?

+2

我不認爲Proguard的春季將是兼容的,因爲Proguard的重命名類,屬性等等... :( – 2012-04-30 12:44:47

+0

我切換到基於註釋的配置,這使得proguard可以重命名類的屬性等..我只是在與這個障礙掙扎..如果我克服它,它可以definetly工作 – Genjuro 2012-04-30 12:50:48

+0

什麼是'com.company.project .faaa'? – 2012-04-30 12:55:37

回答

2

我發現的來源問題,如果啓用優化器,Proguard會將交互與其實現合併。

我加入

-dontoptimize 

和probleme解決

3

您可以嘗試的是通過告訴proguard通過-keep選項來保留@Componentas is

在情況下,如果你使用proguarg Maven插件,你可以設置這個選項爲:

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

它會保持@Component部件逆向工程和Spring友好:)

+0

我已經在使用這個選項:-keepattributes * Annotation * 但我會嘗試你的建議,但我可以告訴你,proguard不會改變每個類的名字註釋「組件」,這是不好的因爲它會最終保留整個應用程序:D因爲我廣泛使用彈簧注入和不同層次 – Genjuro 2012-05-02 08:08:06

+0

因爲你是唯一一個發佈答案:D我想我'只是爲你提供賞金;)我無論如何不能獎勵自己:) 謝謝你的伴侶 – Genjuro 2012-05-07 14:18:14

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>