JAI设置 相当繁琐,涉及多个jars和环境变量。如果我可以将项目添加为常规的Maven依赖项,那么它将大大有助于项目的可移植性。
我使用的POM片段是
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
</dependency>
这些错误是
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) com.sun.media:jai_imageio:jar:1.1
2) javax.media:jai_core:jar:1.1.3
当然,我可以下载并安装这些罐子。问题有两个:
我还没有找到一种方法让这个方法与Maven一起工作。
因为我使用JAI的原因,请参阅 使用ImageIO的YCCK图像 。
您需要下载这些jars并将它们安装在本地maven存储库或本地存储库代理服务器(Nexus/Artifactory)中。我认为您可以使用 maven-enforcer插件 来验证环境设置是否存在。
我没有看到的是,JAI依赖只需要在运行时得到满足,因此我通过为Tomcat配置JAI来确保生产环境能够访问JAI。
试试这个:
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
<type>pom</type>
</dependency>
为了避免加载jars并安装它们,您可以添加对spring的依赖。因此,稍微更改正常的依赖关系:
<dependency>
<groupId>javax.media.jai</groupId>
<artifactId>com.springsource.javax.media.jai.core</artifactId>
<version>1.1.3</version>
</dependency>
并添加存储库声明:
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/external</url>
</repository>
现在它应该可以工作了(它使所有sun类都可用javax.media.jai.*)。见这里:
如果需要,还可以添加编解码器依赖项..。
jai_core有一个“独立”的实现,不依赖于jai_core。它不需要在JDK和JRE上安装JAI,只需要一个Maven依赖项。
在Maven中,添加它的存储库:
<repository>
<releases />
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>mygrid-repository</id>
<name>myGrid Repository</name>
<url>http://www.mygrid.org.uk/maven/repository</url>
</repository>
和受抚养人:
<dependency>
<groupId>net.java.dev.jai-imageio</groupId>
<artifactId>jai-imageio-core-standalone</artifactId>
<version>1.2-pre-dr-b04-2014-09-13</version>
</dependency>
有关更多细节,请参见 其站点
PS是在一个有用的注释之后更新的(来自gitHub的另一个依赖项不需要添加该存储库):
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.3.0</version>
</dependency>
这对我起了作用:
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-coverage</artifactId>
<version>2.7.4</version>
</dependency>
<repository>
<id>osgeo</id>
<name>Open Source Geospatial Foundation Repository</name>
<url>http://download.osgeo.org/webdav/geotools/</url>
</repository>
看来gt覆盖率取决于jai_imageio,所以它为我安装了合适的jars。我甚至不需要改变我的代码来使用这个工件。
这将使您的代码在IDE中工作。但是,如果您想要一个可执行的jar,那么您需要使用Maven Shade插件。它的使用被描述为 这里 和 这里 。请注意第二链接中的额外行,因为它们是必要的。下面是您的pom中的额外代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.3.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.companyname.packagename.MainClassName</Main-Class>
<Specification-Title>Java Advanced Imaging Image I/O Tools</Specification-Title>
<Specification-Version>1.1</Specification-Version>
<Specification-Vendor>Sun Microsystems, Inc.</Specification-Vendor>
<Implementation-Title>com.sun.media.imageio</Implementation-Title>
<Implementation-Version>1.1</Implementation-Version>
<Implementation-Vendor>Sun Microsystems, Inc.</Implementation-Vendor>
<Extension-Name>com.sun.media.imageio</Extension-Name>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
我不知道这些额外的清单条目是什么,但是它们使我的可执行jar在IDE中做了它所做的事情。
manunu中的存储库url似乎已经更改,或者至少暂时不可用,这会导致maven构建失败。作为一种替代办法,可以使用以下网址:
http://build.mygrid.org.uk/maven/repository
<repository>
<releases />
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>mygrid-repository</id>
<name>myGrid Repository</name>
<url>http://build.mygrid.org.uk/maven/repository</url>
</repository>
<dependency>
<groupId>javax.media.jai</groupId>
<artifactId>com.springsource.javax.media.jai.core</artifactId>
<version>1.1.3</version>
</dependency>
并添加存储库声明:
<repository>
<id>com.springsource.repository.bundles.external</id>
<name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>