错误描述
上传图片时,我们的项目需要做一些上传后处理。但是,在上载JPEG文件后运行代码
BufferedImage bImg = ImageIO.read(file);
触发异常:
Caused by: java.lang.NoClassDefFoundError: com/twelvemonkeys/imageio/util/ProgressListenerBase
at com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReaderSpi.createReaderInstance(JPEGImageReaderSpi.java:126)
at javax.imageio.spi.ImageReaderSpi.createReaderInstance(ImageReaderSpi.java:320)
at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:529)
at javax.imageio.ImageIO$ImageReaderIterator.next(ImageIO.java:513)
at javax.imageio.ImageIO.read(ImageIO.java:1443)
at javax.imageio.ImageIO.read(ImageIO.java:1308)
上传PNG文件时一切正常。
项目配置
我们的JavaEE7项目最初需要12个像素来处理CMYK编码的JPG图像。耳朵由以下部分组成:
project-common
有十二种依赖关系:
<!-- Image IO -->
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-bmp</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.servlet</groupId>
<artifactId>servlet</artifactId>
<version>3.3.2</version>
</dependency>
通过传递性转发给其他组件。我们只处理
.jp(e)g
和
.png
. 我们也使用
Thumbnailator
还有十二只猴子。
故障排除
-
documentation
和
this SO question
,我在中添加了侦听器
project-web
:
<listener>
<display-name>ImageIO service provider loader/unloader</display-name>
<listener-class>com.twelvemonkeys.servlet.image.IIOProviderContextListener</listener-class>
</listener>
在Netbeans下
com/twelvemonkeys/imageio/util/ProgressListenerBase
project-ejb
和
项目网站
-
不管
ImageIO.read(file)
被召入
ejb项目
或
项目网站
,错误相同
-
ImageIO.scanForPlugins()
之前
ImageIO.read(文件)
,错误相同
变通办法
跟随
我已手动放置依赖项
# common dependencies:
> common-image-3.3.2.jar
> common-io-3.3.2.jar
> common-lang-3.3.2.jar
# shared dependencies:
> imageio-core-3.3.2.jar
> imageio-metadata-3.3.2.jar
# TwelveMonkeys dependencies:
> imageio-jpeg-3.3.2.jar
> imageio-bmp-3.3.2.jar
# Servlet
> servlet-3.3.2.jar
在里面
{PAYARA_DIR}\glassfish\domains\{DOMAIN_NAME}\lib
文件夹
没有
删除侦听器。我把依赖范围改为
<scope>provided</scope>
问题