解決java.lang.NoClassDefFoundError第三方依賴jar包問題/把本地jar打包進war包問題

這種報錯的原因是本地的jar包沒有被maven構建項目時打包, 解決辦法時配置pom文件將本地jar包打包進項目.

報錯信息

java.lang.NoClassDefFoundError
java.lang.ClassNotFoundException
依賴的clss文件沒有找到

Caused by: java.lang.NoClassDefFoundError: com/taobao/api/ApiException
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.getDeclaredMethods(Class.java:1975)
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:489)
	... 64 more
Caused by: java.lang.ClassNotFoundException: com.taobao.api.ApiException
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
	... 68 more
2020-06-05 22:15:43,175 944    [on(3)-127.0.0.1] WARN  pport.XmlWebApplicationContext  - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userAPI': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.marchsoft.dingtalk.UserAPI] from ClassLoader [ParallelWebappClassLoader
  context: class_schedule_war
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@515f550a
]
2020-06-05 22:15:43,181 950    [on(3)-127.0.0.1] ERROR work.web.context.ContextLoader  - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userAPI': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.marchsoft.dingtalk.UserAPI] from ClassLoader [ParallelWebappClassLoader
  context: class_schedule_war
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@515f550a

報錯圖片
在這裏插入圖片描述
在這裏插入圖片描述

報錯原因

本地導入jar包
在這裏插入圖片描述

tomcat運行構建的項目WEB-INF/lib下並沒我導入的jar包
在這裏插入圖片描述

解決

第一步: pom.xml配置dependency依賴

以下是下載的釘釘sdk, 在maven中導入的依賴.

 <!-- 本地jar包依賴-->
 <dependency>
     <groupId>com.taobao.top</groupId>
     <artifactId>top-api-sdk-dev</artifactId>
     <version>ding-open-mc-SNAPSHOT</version>
     <scope>system</scope>
     <systemPath>${project.basedir}/src/lib/taobao-sdk-java-auto_1479188381469-20200525.jar</systemPath>
 </dependency>

scope: 表示系統運行時依賴此jar
systemPath: 指本地jar的位置(絕對路徑); ${project.basedir}是項目路徑
在這裏插入圖片描述

第二步: 在pom.xml的標籤中加入

<!-- 將本地jar包打包進war -->
 <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-war-plugin</artifactId>
     <configuration>
         <warName>${project.artifactId}</warName>
         <webResources>
             <resource>
                 <directory>src/lib/</directory>
                 <targetPath>WEB-INF/lib</targetPath>
                 <includes>
                     <include>**/*.jar</include>
                 </includes>
             </resource>
         </webResources>
     </configuration>
 </plugin>

固定內容標籤: groupId、atrifactId、warName

directory: 爲本地jar路徑
targetPath: 打包路徑
include: **/*.jar 表示指定路徑下所有jar

第三步測試

  • 注意及時清理之前構建的項目殘留文件

  • 構建時可以嘗試maven構建命令,然後運行tomcat
    在這裏插入圖片描述

  • 重新構建後,可以看到本地jar已經被打包到項目裏
    在這裏插入圖片描述
    能力有限,若有問題歡迎評論指正。

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