專案使用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版就沒問題了