java.lang.NoSuchMethodError:javax.persistance.Table.Indexes

專案使用Hibernate,用JBoss佈檔時會跳出java.lang.NoSuchMethodError:javax.persistance.Table.Indexes這個錯誤

處理這個錯誤的流程如下:

 

google這個錯誤時

大多指向是與其他jar包發生衝突

於是我仔細檢查專案裡的每個jar檔

但都沒有發現問題


經過持續地尋找資料後發現

這個問題主要發生在Hibernate4.3以後的版本

這個版本有一個重大變更

就是hibernate-jpa-2.0-api這個jar檔

升級成hibernate-jpa-2.1-api

而2.1版就是新增了Indexes這個方法

所以如果還是引用2.0版就會出錯

但問題是我在哪裡引用到了2.0版呢

 

很幸運的剛好看到一篇文章

是tomcat換成weblogic時發生這個問題

我就想會不會是JBoss有問題

於是我就把JBoss裡每個資料夾都點開來看

結果看到裡面竟然有 hibernate-jpa-2.0-api這個jar檔

於是先把原本的資料夾先複製一份起來

再把裡面的設定檔與jar檔全部調整成2.1版

再次佈檔就成功了

路徑位置:EAP-6.4.0\modules\system\layers\base\javax\persistence\api\main

 

結論是

JBoss在啟動時就會預先載入一些jar檔

而佈檔時會先處理JBoss的jar

才會輪到處理要發佈的war檔

所以會先讀取到2.0版而不是2.1版

正因為這樣的先後順序導致佈檔時出問題

於是調整成預先載入2.1版就沒問題了