這種報錯的原因是本地的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已經被打包到項目裏
能力有限,若有問題歡迎評論指正。