在Maven中使用Java高级映像
这个过程相当乏味,涉及多个JAR和环境变量。如果我可以将它添加为一个常规的Maven依赖项,那么它将非常有助于项目的可移植性 我使用的POM代码片段是在Maven中使用Java高级映像,java,maven-2,jai,Java,Maven 2,Jai,这个过程相当乏味,涉及多个JAR和环境变量。如果我可以将它添加为一个常规的Maven依赖项,那么它将非常有助于项目的可移植性 我使用的POM代码片段是 <dependency> <groupId>com.sun.media</groupId> <artifactId>jai_imageio</artifactId> <version>1.1</version> </dependency>
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
</dependency>
当然,我可以下载并安装这些JAR。问题有两方面:
- jai_imageio需要两个罐子李>
- jai_imageio需要安装一个本机库,并设置两个环境变量
请参阅,了解我使用JAI的原因。您需要下载JAR并将其安装到本地maven存储库或本地存储库代理服务器(Nexus/Artifactory)中。我认为您可以使用验证环境设置是否存在
for jai_imageio不允许这样做。我没有看到的是,jai依赖关系只需要在运行时得到满足,因此我通过为Tomcat配置jai来确保生产环境可以访问它。尝试以下操作:
<dependency>
<groupId>com.sun.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
<type>pom</type>
</dependency>
com.sun.media
jai_imageio
1.1
聚甲醛
为了避免加载jar并安装它们,您可以在spring repo上添加一个依赖项。因此,稍微改变正常的依赖关系:
<dependency>
<groupId>javax.media.jai</groupId>
<artifactId>com.springsource.javax.media.jai.core</artifactId>
<version>1.1.3</version>
</dependency>
javax.media.jai
如果需要,还可以添加编解码器依赖项
JAI imageio有一个“独立”的实现,不依赖于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>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.3.0</version>
</dependency>
假的
mygrid存储库
myGrid存储库
http://www.mygrid.org.uk/maven/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>
net.java.dev.jai-imageio
欲知详情
PS在一条有用的注释后更新(gitHub的另一个依赖项,不需要添加该存储库):
com.github.jai-imageio
jai图像核心
1.3.0
这对我很有用:
<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>
org.geotools
和。注意第二个链接中的额外行,因为它们是必需的。以下是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>
org.apache.maven.plugins
maven阴影插件
1.3.1
包裹
阴凉处
com.companyname.packagename.MainClassName
Java高级图像I/O工具
1.1
太阳微系统公司。
com.sun.media.imageio
1.1
太阳微系统公司。
com.sun.media.imageio
我不知道这些额外的清单条目是什么,但它们让我的可执行jar执行它在IDE中的功能。manunu回答中的存储库url似乎已更改或至少暂时不可用,这导致maven构建失败。作为替代方案,可以使用以下url:
假的
mygrid存储库
myGrid存储库
http://build.mygrid.org.uk/maven/repository
javax.media.jai
com.springsource.javax.media.jai.core
1.1.3
并添加存储库声明:
<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>
<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>
com.springsource.repository.bundles.external
SpringSource企业捆绑包存储库-外部捆绑包版本
http://repository.springsource.com/maven/bundles/external
这对我有用。我猜它依赖于Spring Jar。我在pom文件中添加了以下依赖项:
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.4.0</version>
</dependency>
com.github.jai-imageio
谢谢你的回答。我很害怕,但是我想我需要为它创建我自己的POM。好的,文件的POM已经存在了。它确实具有jai_core所需的依赖性。缺点是它在分发管理中有下载URL。如果您想将项目部署到Maven Central,这是正确的答案。MC不允许依赖第三方存储库,这里的一些其他答案提供了这些存储库。除非您的项目中需要geotools库,否则将其作为依赖项添加到jai编解码器中似乎是一个糟糕的解决方案。先生,我在运行时面临问题。tomcat找不到类文件。我偶尔会得到NoClassDefFoundError
,正确的解决方案是什么,即如何配置tomcat以使其始终获得类定义?我正在使用这3个文件jai codec 1.1.3 jai core 1.1.3 jai imageio 1.2
也许这在2011年起了作用,但现在没有了,这些东西就不存在了。这似乎不包括所需的imageio
请注意这在IDEA中不起作用,因为它不喜欢包名为javax的事实。因此,如果您从链接中获取jar文件并将其添加到项目中,它将起作用。。刚才添加了上面提到的存储库和以后的依赖项。对我来说,获取真正的存储库URL是一件麻烦事。我想让你知道你是最好的。虽然,实际上,如果你从@manunu的答案中查看Github站点,你会看到自述文件中的依赖性,它不需要重新发布(我测试了它),结果是
部分可能过时了,但这对我来说也适用于maven。但在我搬到格拉德尔后,它就不起作用了
<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>
<dependency>
<groupId>com.github.jai-imageio</groupId>
<artifactId>jai-imageio-core</artifactId>
<version>1.4.0</version>
</dependency>