軟件版本差異造成的異常

前提

作爲異常及其解決方案的收集貼,這篇博文主要記錄由軟件版本差異造成的異常。


異常1:java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException.

情境: 將在JDK 8環境下開發並運行過一段時間的工程,部署到JDK 12環境下的服務器上。

觸發異常的原因: Java 9中引入了模塊的概念,默認情況下,J2SE聚合模塊在類路徑(或者說模塊路徑)上可用。正如其名稱所暗示的,J2SE匯聚模塊不再包含J2EE的API。而JAXB屬於J2EE的API。

解決方案: 在工程中額外添加上JAXB API的依賴即可。

<!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

異常2:tomcat用戶權限已設置但仍然報403錯誤

情境: 已經在tomcat-users.xml中設置了用戶權限,但通過maven的tomcat7-maven-plugintomcat8執行遠程熱部署時仍然報403錯誤,說所提供的用戶沒有權限。

觸發異常的原因: tomcat8默認啓用了網段限制,只有127網段局域網的機器,能夠有訪問權限,其他網段訪問會報403。

解決方案: 分別修改webapps文件夾下的managerhost-manager兩個工程,將META-INFcontext.xml的內容由

      <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

改爲

      <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

後記

很多軟件在更新之後不會完全的對下兼容,或者有一些默認設置發生了改變,值得記錄下來,以便下次遇到時快速解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章