Java TwelveMonkeys 3.1.1 | | 3.1.2不使用maven依赖插件
我试图在我的应用程序中使用来处理缩略图生成。另外,我正在使用Java TwelveMonkeys 3.1.1 | | 3.1.2不使用maven依赖插件,java,maven-dependency-plugin,twelvemonkeys,Java,Maven Dependency Plugin,Twelvemonkeys,我试图在我的应用程序中使用来处理缩略图生成。另外,我正在使用maven依赖插件解包所有依赖项并创建一个胖jar。虽然,该插件在正常情况下工作得很好,但在与maven依赖插件一起使用时根本不起作用。以下是我的POM XML: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSc
maven依赖插件
解包所有依赖项并创建一个胖jar。虽然,该插件在正常情况下工作得很好,但在与maven依赖插件一起使用时根本不起作用。以下是我的POM XML:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.prakhar</groupId>
<artifactId>demo</artifactId>
<name>demo</name>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<organization>
<!-- Used as the 'Vendor' for JNLP generation -->
<name>Your Organisation</name>
</organization>
<properties>
<slf4j.version>1.6.1</slf4j.version>
</properties>
<build>
<plugins>
<plugin>
<!-- Get the dependencies jar files to a common place, for jar signing -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<!-- <includeArtifactIds>commons-net,imageio-bmp,imageio-jpeg,imageio-tiff,imageio-pnm,imageio-psd,imageio-iff,imageio-pcx,imageio-pict,imageio-sgi,imageio-tga,imageio-icns,imageio-thumbsdb,imageio-core,imageio-metadata,common-lang,common-io,common-image</includeArtifactIds> -->
<outputDirectory>${project.build.directory}/classes</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- MigLayout -->
<!-- Apache Commons -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<!-- Twelve Monkeys dependencies -->
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-bmp</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-jpeg</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-tiff</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-pnm</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-psd</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-iff</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-pcx</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-pict</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-sgi</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-tga</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-icns</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-thumbsdb</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
</project>
以下是我得到的一个例外:
java.lang.NullPointerException: Input == null
at com.twelvemonkeys.image.ResampleOp.filter(Unknown Source)
如果有人知道如何解决,请说明。总之,对于未来的读者,问题是每个ImageIO插件JAR包含多个
META-INF/services
下的资源。自动发现ImageIO插件需要这些资源。它们是:
META-INF/services/javax.imageio.spi.ImageReaderSpi
META-INF/services/javax.imageio.spi.ImageWriterSpi
META-INF/services/javax.imageio.spi.ImageInpuStreamSpi
META-INF/services/javax.imageio.spi.ImageOutputStreamSpi
可能还有更多,但十二只猴子不使用这些
对于感兴趣的学生,您可以阅读更多关于机制的内容,尤其是类
当您将所有JAR文件解压到一个文件夹中时,每个JAR都会覆盖这些文件。相反,需要将具有相同名称的资源合并到新的单个资源中
提供了一个解决方案,请参见资源转换器,特别是 你想读什么样的文件?错误消息表明您没有该文件格式的读卡器插件。我不知道fat jar插件是如何工作的,但我知道每个
imageio xxx.jar
插件都包含同名的META-INF/services/
下的图像。这些需要以某种方式合并。如果它们被覆盖,插件将不会被注册。@我自己:上面的评论中有一个输入错误。;-)它应该说“每个imageio xxx.jar
插件包含META-INF/services/
下同名的资源”。也就是说,有多个META-INF/services/javax.imageio.spi.ImageReaderSpi
(和其他)资源需要合并到单个资源中。我不确定Maven插件是如何处理的。Maven Shade插件似乎提供了一个解决方案,请参阅资源转换器,尤其是。@haraldK,非常感谢您将我指向META-INF/services/
文件夹。阴影插件确实击中了要害。我用遗留的maven依赖插件
替换了它,我的快速临时解决方案是将这一行com.twevelmonkeys.imageio.plugins.pnm.pnmimagerspi
添加到/META-INF/services/javax.imageio.spi.ImageReaderSpi
,因为我只需要读取pnm/PGM文件。提交我的作业效果很好!
META-INF/services/javax.imageio.spi.ImageReaderSpi
META-INF/services/javax.imageio.spi.ImageWriterSpi
META-INF/services/javax.imageio.spi.ImageInpuStreamSpi
META-INF/services/javax.imageio.spi.ImageOutputStreamSpi