Использование Java Advanced Imaging с Maven - PullRequest
50 голосов
/ 31 июля 2009

Настройка 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

Я могу, конечно, скачать и установить эти банки. Проблема двоякая:

  • jai_imageio требуется две банки;
  • jai_imageio требует установки собственной библиотеки и установки двух переменных среды.

Я не нашел способа заставить эту работу работать с Maven.


См. Чтение изображений JCS_YCCK с использованием ImageIO по той причине, что я использую JAI.

Ответы [ 8 ]

41 голосов
/ 29 октября 2011

Чтобы не выгружать банки и не устанавливать их, вы можете добавить зависимость от весеннего репо. Поэтому немного измените нормальную зависимость:

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

И теперь он должен работать (он делает все классы солнца доступными 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

13 голосов
/ 19 января 2012

Существует "автономная" реализация 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>
12 голосов
/ 31 июля 2009

Вам понадобится скачать файлы jar и установить их в локальный репозиторий Maven или прокси-сервер локального репозитория (Nexus / Artifactory). Я думаю, что вы можете использовать maven -forcer-plugin , чтобы проверить наличие настроек среды.

Лицензия для jai_imageio не позволяет распространять .

2 голосов
/ 13 февраля 2012

Это сработало для меня:

<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, поэтому он установил мне подходящие jar-файлы. Мне даже не пришлось менять свой код, чтобы использовать этот артефакт.

Это позволит вашему коду работать в вашей IDE. Однако, если вам нужен исполняемый файл jar, вам нужно использовать плагин Maven Shade. Его использование описано здесь и здесь . Обратите внимание на дополнительные строки во 2-й ссылке, потому что они необходимы. Вот дополнительный код для входа в вашу помпу:

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

1 голос
/ 18 ноября 2014
<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, он не должен двигаться как java

1 голос
/ 14 мая 2014

URL-адрес хранилища в ответе Мануну, похоже, изменился или по крайней мере временно недоступен , что приводит к сбою сборки maven. В качестве альтернативы можно использовать следующий URL:

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>
1 голос
/ 01 августа 2009

Что мне не удалось увидеть, так это то, что зависимость JAI нужно было удовлетворять только во время выполнения, и поэтому я убедился, что производственная среда имеет доступ к JAI, настроив его для Tomcat.

0 голосов
/ 30 июля 2010

попробуйте это:

<dependency>
  <groupId>com.sun.media</groupId>
  <artifactId>jai_imageio</artifactId>
  <version>1.1</version>
  <type>pom</type>
</dependency>
...