解決:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
阿新 • • 發佈:2019-02-11
專案開發環境是jdk8, 但是部署的伺服器裝的是jdk10, 把專案打成war包後往伺服器的tomcat部署時候出現如下錯誤
java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
查詢以下資料得以解決:
今天在使用JDK 9.0 環境下使用Hibernate 時候出現了這個錯誤,錯誤日誌如下:
故障原因:
JAXB API是java EE 的API,因此在java SE 9.0 中不再包含這個 Jar 包。
java 9 中引入了模組的概念,預設情況下,Java SE中將不再包含java EE 的Jar包
而在 java 6/7 / 8 時關於這個API 都是捆綁在一起的
解決方案一:
降低JDK 9 版本到 JDK 6/7/8
解決方案二:(親測可行)
手動加入這些依賴Jar包
要解決這個問題,我匯入了下面這四個Jar包修復成功。
下載上面這些檔案和複製他們到libs資料夾下,
新增他們匯入到Build Path中
重新執行即可
解決方案三:
Maven專案可新增如下依賴:
<!-- Java 6 = JAX-B Version 2.0 -->
<!-- Java 7 = JAX-B Version 2.2.3 -->
<!-- Java 8 = JAX-B Version 2.2.8 -->
<dependencies>
<dependency >
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId >
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
Tips:
建議使用中心倉庫,否則可能某些jar找不到:
測試程式碼:
測試類:
public class DatabaseConnectionTools {
private static final SessionFactory ourSessionFactory;
static {
try {
Configuration configuration = new Configuration();
configuration.configure();
ourSessionFactory = configuration.buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() throws HibernateException {
return ourSessionFactory.openSession();
}
public static void main(final String[] args) throws Exception {
final Session session = getSession();
try {
System.out.println("querying all the managed entities...");
final Metamodel metamodel = session.getSessionFactory().getMetamodel();
for (EntityType<?> entityType : metamodel.getEntities()) {
final String entityName = entityType.getName();
final Query query = session.createQuery("from " + entityName);
System.out.println("executing: " + query.getQueryString());
for (Object o : query.list()) {
System.out.println(" " + o);
}
}
} finally {
session.close();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
Tips: 如果做完上述操作,仍然報錯,請檢查out 資料夾下的lib 資料夾中是否包含剛新增的幾個Jar包,如果沒有,那麼請繼續下面的操作:
選中project,然後右鍵選擇open module settings
然後檢查Problem選項卡,檢查右側是否有‘Fixed’ 字樣,如果有,請點選’Fixed’