前提
作爲異常及其解決方案的收集貼,這篇博文主要記錄由軟件版本差異造成的異常。
異常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-plugin
向tomcat8
執行遠程熱部署時仍然報403錯誤,說所提供的用戶沒有權限。
觸發異常的原因: tomcat8默認啓用了網段限制,只有127網段局域網的機器,能夠有訪問權限,其他網段訪問會報403。
解決方案: 分別修改webapps
文件夾下的manager
和host-manager
兩個工程,將META-INF
中context.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" />
後記
很多軟件在更新之後不會完全的對下兼容,或者有一些默認設置發生了改變,值得記錄下來,以便下次遇到時快速解決。