热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Maven无法打包jar到Tomcat

今天新来的同事,让他调试短信验证的接口。跟我说添加的aliyun的短信验证服务无法在tomcat上运行。然后给我看了报错信息:java.lang.NoClassDefFoundEr

今天新来的同事,让他调试短信验证的接口。跟我说添加的aliyun的短信验证服务无法在tomcat上运行。然后给我看了报错信息:

java.lang.NoClassDefFoundError: com/aliyuncs/exceptions/ClientException
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Unknown Source)
java.lang.Class.getDeclaredMethods(Unknown Source)
org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:606)
org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:518)
org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:504)

其实看第一行就知道,是阿里云的jar包没有添加进来。我看了同步了一下工程。首先看编译能通过,pom.xml里面有相应的信息。maven dependency里面也有相应的jar包。


com.aliyun
aliyun-java-sdk-core
3.3.1
system
${project.basedir}/lib/aliyun-java-sdk-core-3.3.1.jar


com.aliyun
aliyun-java-sdk-dysmsapi
1.0.0
system
${project.basedir}/lib/aliyun-java-sdk-dysmsapi-1.0.0.jar

再看看lib 的存放路径,是和src 平级的目录。

《Maven 无法打包jar到 Tomcat》 image.png

再去tomcat所在的目录下查看,是没有lib里面的两个包的。这种情况肯定是打包的时候没有把本地的jar包打到war包里面。有两个方式可以解决这个问题。

第一种方式,把lib目录添加到WEB-INF目录下面,如下图。因为WEB-INF/lib是会被默认打包的。所以它下面的所有jar包都会被拷贝。

《Maven 无法打包jar到 Tomcat》 image.png

第二种方式,在pom.xml里面添加maven-war-plugin插件,这样也可以把所有maven里面的文件拷贝到war包里面。


xxx
...

...//添加下面这个plugin到build里面

org.apache.maven.plugins
maven-war-plugin
2.4

${project.artifactId}


lib/
WEB-INF/lib

**/*.jar







这个问题应该还是对maven的不熟悉导致的。接下来可以看看maven的一些知识。推荐使用第一种方式,更合maven的逻辑。


推荐阅读
author-avatar
浅唱_夏染_744
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有