Pregunta

El configuración JAI es bastante tedioso, involucra múltiples frascos y variables de entorno. Ayudaría bastante a la portabilidad del proyecto si pudiera agregarlo como una dependencia regular de Maven.

El fragmento de POM que estoy usando es

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

y los errores son

[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

Puedo, por supuesto, descargar e instalar esos tarros. El problema es doble:

  • jai_imageio requiere dos frascos;
  • jai_imageio requiere la instalación de una biblioteca nativa y la configuración de dos variables de entorno.

No he encontrado una manera de hacer que esto funcione con Maven.


Consulte Lectura de imágenes JCS_YCCK usando ImageIO por la razón por la que estoy usando JAI.

¿Fue útil?

Solución 5

Lo que no pude ver fue que la dependencia de JAI solo debía satisfacerse en tiempo de ejecución y, por lo tanto, me aseguré de que el entorno de producción tuviera acceso a JAI, configurándolo para Tomcat.

Otros consejos

Para evitar descargar los frascos e instalarlos, puede agregar una dependencia en el repositorio de primavera. Entonces cambie la dependencia normal ligeramente:

    <dependency>
        <groupId>javax.media.jai</groupId>
        <artifactId>com.springsource.javax.media.jai.core</artifactId>
        <version>1.1.3</version>
    </dependency>

y agregue una declaración de repositorio:

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

Y ahora debería funcionar (hace que todas las clases de sol estén disponibles javax.media.jai. *). Ver aquí:

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

También puede agregar la dependencia de códec si es necesario ...

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

Hay un " independiente " implementación de JAI-imageio, sin dependencias de jai_core. No necesita instalación JAI en su JDK y JRE, solo depende de Maven.

En Maven, agregue su repositorio:

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

y dependencia:

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

Consulte su sitio para obtener más detalles

PS actualizado después de un comentario útil (otra dependencia de gitHub que no necesita agregar ese repositorio):

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

Tendrá que descargar los frascos e instalarlos en su repositorio local de Maven o en el servidor proxy del repositorio local (Nexus / Artifactory). Creo que puede usar el maven-enforcer-plugin para validar que el entorno la configuración está ahí.

La licencia para jai_imageio no permite que sea distribuido .

Esto funcionó para mí:

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

Parece que la cobertura gt depende de jai_imageio, por lo que instaló los frascos apropiados para mí. Ni siquiera tuve que cambiar mi código para usar este artefacto.

Esto hará que su código funcione dentro de su IDE. Sin embargo, si desea un jar ejecutable, debe usar el complemento Maven Shade. Su uso se describe aquí y aquí . Tenga en cuenta las líneas adicionales en el segundo enlace porque son necesarias. Aquí está el código adicional para ir en su 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>

No sé cuáles son todas esas entradas de manifiesto adicionales, pero hacen que mi jar ejecutable haga lo que hace en el IDE.

La URL del repositorio en la respuesta de manunu parece haber cambiado o, al menos, está temporalmente no disponible , lo que hace que falle la construcción de Maven. Como alternativa, se puede usar la siguiente 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>
<dependency>
    <groupId>javax.media.jai</groupId>
    <artifactId>com.springsource.javax.media.jai.core</artifactId>
    <version>1.1.3</version>
</dependency>

y agregue una declaración de repositorio:

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

Esto funcionó para mí. Guess puede confiar en Spring Jar, no debería moverse como lo hizo Java

prueba esto:

<dependency>
  <groupId>com.sun.media</groupId>
  <artifactId>jai_imageio</artifactId>
  <version>1.1</version>
  <type>pom</type>
</dependency>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top