cos已经通过maven添加了,getFile()时为什么还报java.lang.NoClassDefFoundError:?

        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>cos</artifactId>
            <version>26Dec2008</version>
        </dependency>
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jetty-server</artifactId>
            <version>8.1.8</version>
        </dependency>

这是maven配置

import com.oreilly.servlet.multipart.FileRenamePolicy;

这里手动导入也没问题

但是controller里用

getFile()

时还是报错了

Caused by: java.lang.NoClassDefFoundError: com/oreilly/servlet/multipart/FileRenamePolicy

见鬼了?我哪里姿势不对吗?

评论区

JFinal

2017-03-23 16:33

添加了,但仍然没有生效,很可能是没正确下载,打开 maven 库中的相关目录,找一下这个 jar 包是否正的存在

wyntergreg

2017-03-23 16:42

@JFinal C:\Users\Administrator\.m2\repository\com\jfinal\cos\26Dec2008这里边有包啊,没错啊

wyntergreg

2017-03-23 16:43

@JFinal 关键我在controller里手动import com.oreilly.servlet.multipart.FileRenamePolicy;是可以的啊,为什么getFile()里会报classNotFound呢

JFinal

2017-03-23 16:51

@wyntergreg 这个确实诡异,这个问题仅仅是 jar 包引用的问题,多试试,例如重启下 ecipse 试试,可能是 eclipse 的 bug

wyntergreg

2017-03-23 17:11

@JFinal 我用的是IDEA啊,好吧我重启好几遍也不行。话说看你两年前在OSC上说2.0以后支持Commons FileUpload了?手册里没有说明啊

JFinal

2017-03-23 17:14

@wyntergreg jfinal 目前仍然只支持 cos上传,如果希望支持 commons fileupload,可以简单扩展一下,具体办法是:
1:在 controller 中通过 getRequest() 拿到 HttpServletRequest 对象
2:将 request 对象传递给 commons fileupload 相关 api 并解析出其中的上传文件
3:调用 renderNull()

wyntergreg

2017-03-23 17:28

@JFinal 我真是醉了,我手动用cos实现一下,building失败,直接报com.oreilly.servlet.MultipartRequest,见了鬼了!Jar包是在的啊?

wyntergreg

2017-03-23 17:29

@JFinal 这真是日了狗了,不行换commons fileupload试试,再不行就去日非洲大草原,谢詹大支持

JFinal

2017-03-23 17:47

@wyntergreg 我相信,归根到底还是一个配置的问题, IDEA 的配置一定要了然于心,与 eclipse 有很大的不同,注意 pom.xml 中要是 compile 不能是 provided

JFinal

2017-03-23 17:48

检查一下是不是 provided 的问题引发的

wyntergreg

2017-03-24 09:14

@JFinal pom.xml里没有compile/provided啊,现在发现了,tomcat发布以后lib目录里没有cos的jar包,杯了个具,我现在怀疑会不会是version的问题?cos那个26Dec2008的version越看越不顺眼,不符合标准版本号规则

wyntergreg

2017-03-24 09:20

@JFinal 我了个苍天来,手动把cos-26Dec2008.jar包粘到tomcat发布目录lib里就好了!折腾啊!崩溃啊!折磨啊!詹大求安慰!

wyntergreg

2017-03-24 09:30

@JFinal 由于工作关系这个地方不深究了哈,目测极度怀疑是cos包的版本号命名不规范引发的jar包无法被deploy,因为tomcat的lib目录里其他可以被正常deploy的包的版本号都是数字+点的,唯独cos的版本号是26Dec2008,不符合语义化版本号http://semver.org/lang/zh-CN/。回头我解决完问题再来落实这个哈!

JFinal

2017-03-24 11:36

@wyntergreg 你是怎么部署的? 打成 war 包,然后将 war 直接扔进去的? 此外,你说的 tomcat 发布目录的 lib 下面没有 jar 包,是指项目的 WEB-INF/lib 还是指 tomcat 的 lib ?

wyntergreg

2017-03-24 13:57

@JFinal 我没辙了!詹大!maven里只要加上cos,IDEA运行tomcat debug时IDEA就干脆不给tomcat部署!IDEA本地干脆也不building了,out路径里META-INF目录和WEB-INF目录都不生成!我把cos jar包版本号改成26.2008(pom和本地repository里的文件名字都改了)也不给building!把cos从pom里删了就可以!IDEA或者cos,到底谁的锅?

JFinal

2017-03-24 17:49

@wyntergreg 我这里也是 IDEA 下用的 cos,一点毛病没有,只能说是人品问题了,哈哈

尝试重新创建项目,多半还是配置问题,大家都用得好好的,没毛病

rancedxk

2017-10-18 18:16

我也碰到这个问题,在这里回复记录一下。因为我引入的是servlets.com.cos包,所以一直报错,改成咱jfinal版的包com.jfinal.cos就妥妥的解决了

坐拥花丛

2018-10-17 18:37

@rancedxk 正解,仰望大神

迅捷羽翼

2018-12-27 21:30

不错

王子鹏

2019-04-04 16:38

我遇到楼主一样的问题 通过看评论 解决了问题 分享下经验:
pom文件引入以后 依然报这个错的原因是因为编译后的lib文件夹里没有cos这个jar包 应该是IDEA 没有编译过来 执行maven clean 命令 install命令 后 发现lib包里有cos这个jar包 问题解决

热门反馈

扫码入社