美文网首页
Maven 无法打包jar到 Tomcat

Maven 无法打包jar到 Tomcat

作者: 朝圣的路上 | 来源:发表于2017-11-09 20:50 被阅读52次

    今天新来的同事,让他调试短信验证的接口。跟我说添加的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包。

            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>3.3.1</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/lib/aliyun-java-sdk-core-3.3.1.jar</systemPath>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
                <version>1.0.0</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/lib/aliyun-java-sdk-dysmsapi-1.0.0.jar</systemPath>
            </dependency>
    

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


    image.png

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

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


    image.png

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

    <build>
            <finalName>xxx</finalName>
                      ...
            <plugins>
                      ...//添加下面这个plugin到build里面
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <warName>${project.artifactId}</warName>
                        <webResources>
                            <resource>
                                <directory>lib/</directory>
                                <targetPath>WEB-INF/lib</targetPath>
                                <includes>
                                    <include>**/*.jar</include>
                                </includes>
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
              </plugins>
    </build>
    

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

    相关文章

      网友评论

          本文标题:Maven 无法打包jar到 Tomcat

          本文链接:https://www.haomeiwen.com/subject/cimmmxtx.html