1.問題描述
我的resin版本爲4.0.55;
項目在tomcat下啓動正常,通過Myeclipse啓動resin也正常,打包在resin下發布時報錯:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
分析問題這是一個hibernate jpa的錯誤,如果說tomcat啓動正常那麼說明你當前項目的jpa是沒有問題,那麼放到resin下發布時,有什麼不同,是不是resin
自帶了和jpa相關的jar包,那麼到resin下去看看是否有和jpa相關的jar包,果然在resin啓動時,因爲配置原因,將Hibernate的jpa包複製到了resin/lib目錄下,但是沒生效,在javaee-16.jar下有一個javax.persistence.Table實體,這時候問題原因知道了,在resin啓動是應用了這個包下的Table實體,而在項目中用的是hibernate-jpa-2.1-api-1.0.0.Final.jar下的Table實體,現在就是怎麼讓resin在啓動是加載hibernate-jpa-2.1-api-1.0.0.Final.jar而不是javaee-16.jar的問題
2.解決方法
首先在resin下新建目錄ext-lib,將hibernate-jpa-2.1-api-1.0.0.Final.jar放入其中;然後編輯resin/conf/resin.properties文件,如圖所示:
編輯完成保存,再打開resin/conf/cluster-default.xml文件,進行編輯,如圖所示:添加jvm-classpath節點,保存;
此時重啓resin發佈項目不會再報java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index這個錯了。