53

JAI 设置相当繁琐,涉及多个 jar 和环境变量。如果我可以将它添加为常规的 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

当然,我可以下载并安装这些 jar。问题是双重的:

  • jai_imageio 需要两个罐子;
  • jai_imageio 需要安装本机库并设置两个环境变量。

我还没有找到一种方法来使这项工作与 Maven 一起工作。


由于我使用 JAI 的原因,请参阅使用 ImageIO 读取 JCS_YCCK 图像。

4

9 回答 9

44

为了避免下载 jars 并安装它们,您可以添加对 spring repo 的依赖项。所以稍微改变一下正常的依赖:

    <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.*)。看这里:

http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.javax.media.jai.core&version=1.1.3

如有必要,您还可以添加编解码器依赖项...

http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.javax.media.jai.codec&version=1.1.3

于 2011-10-29T17:32:21.817 回答
14

JAI-imageio 有一个“独立”实现,不依赖于 jai_core。它不需要将 JAI 安装到您的 JDK 和 JRE,只需要单个 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>
于 2012-01-19T09:27:40.233 回答
12

您将需要下载 jars 并将它们安装在本地 maven 存储库或本地存储库代理服务器(Nexus/Artifactory)中。我认为您可以使用maven-enforcer-plugin来验证环境设置是否存在。

jai_imageio的许可证不允许分发

于 2009-07-31T00:31:46.310 回答
2

这对我有用:

<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-coverage 取决于 jai_imageio,所以它为我安装了适当的 jar。我什至不必更改我的代码来使用这个工件。

这将使您的代码在您的 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 中所做的事情。

于 2012-02-13T16:18:48.910 回答
2

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>
于 2014-05-13T20:13:17.837 回答
2
<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>

这对我有用。我猜它依赖于 Spring Jar。

于 2014-11-18T13:00:00.780 回答
1

我没有看到的是,JAI 依赖项只需要在运行时得到满足,因此我通过为 Tomcat 配置它来确保生产环境可以访问 JAI。

于 2009-07-31T21:51:03.120 回答
1

试试这个:

<dependency>
  <groupId>com.sun.media</groupId>
  <artifactId>jai_imageio</artifactId>
  <version>1.1</version>
  <type>pom</type>
</dependency>
于 2010-07-30T16:56:16.677 回答
1

我在我的 pom 文件中添加了这个依赖项:

<dependency>
        <groupId>com.github.jai-imageio</groupId>
        <artifactId>jai-imageio-core</artifactId>
        <version>1.4.0</version>
</dependency>   

来自https://openmeetings.apache.org/openmeetings-web/dependencies.html

于 2019-07-20T18:06:48.280 回答