tutorial tag pom plugin mvn compiler clean java maven-2 jai

tag - Usando Java Advanced Imaging con Maven



mvn package (8)

La configuración de JAI es bastante tediosa, involucra múltiples jarras 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 frascos. El problema es doble:

  • jai_imageio requiere dos jarras;
  • jai_imageio requiere que se instale una biblioteca nativa y se establezcan dos variables de entorno.

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

Consulte Lectura de imágenes JCS_YCCK con ImageIO por el motivo por el que estoy usando JAI.


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ó las jarras adecuadas 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 quiere un jar ejecutable, entonces necesita usar el plugin Maven Shade. Su uso se describe here y here . Tenga en cuenta las líneas adicionales en el segundo enlace porque son necesarias. Aquí está el código extra para entrar en tu 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 extra, pero hacen que mi jar ejecutable haga lo que hace en el IDE.


Hay una implementación "independiente" de JAI-imageio, sin dependencias con jai_core. No necesita la instalación de JAI en su JDK y JRE, solo la única dependencia 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>

Vea su sitio para 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>


La url del repositorio en la respuesta de manunu parece haber cambiado o al menos no está disponible temporalmente , lo que hace que la compilación maven falle. 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>


Lo que no pude ver fue que la dependencia JAI necesitaba ser satisfecha solo en el 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.


Para evitar descargar los frascos e instalarlos, puede agregar una dependencia al repo de primavera. Así que cambie la dependencia normal levemente:

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

y agrega 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. *). Mira 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 del 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


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

La licence para jai_imageio no permite que se distributed .


prueba esto:

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


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

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