在Maven中使用Java高级映像

在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>

这个过程相当乏味,涉及多个JAR和环境变量。如果我可以将它添加为一个常规的Maven依赖项,那么它将非常有助于项目的可移植性

我使用的POM代码片段是

<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>