53 votes

Utilisation de Java Advanced Imaging avec Maven

El Configuration de l'IMA est assez fastidieux, impliquant de multiples jars et variables d'environnement. La portabilité du projet s'en trouverait grandement facilitée si je pouvais l'ajouter comme une dépendance Maven normale.

L'extrait de POM que j'utilise est le suivant

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

et les erreurs sont

[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

Je peux, bien sûr, télécharger et installer ces bocaux. Le problème est double :

  • jai_imageio nécessite deux jars ;
  • jai_imageio nécessite l'installation d'une bibliothèque native et la définition de deux variables d'environnement.

Je n'ai pas trouvé de moyen de faire fonctionner cela avec Maven.


Voir Lecture des images JCS_YCCK à l'aide d'ImageIO pour la raison que j'utilise l'IMA.

44voto

Lol Points 504

Pour éviter de télécharger les jars et de les installer, vous pouvez ajouter une dépendance sur le repo de Spring. Changez donc légèrement la dépendance normale :

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

et ajoutez une déclaration de dépôt :

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

Et cela devrait maintenant fonctionner (cela rend toutes les classes sun disponibles javax.media.jai.*). Voir ici :

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

Vous pouvez également ajouter la dépendance du codec si nécessaire...

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

10 votes

Peut-être que cela a fonctionné en 2011, mais plus maintenant, la substance n'est tout simplement pas là.

0 votes

Cela ne semble pas inclure les éléments requis imageio

0 votes

Veuillez noter que cela ne fonctionne pas dans IDEA, car il n'aime pas le fait que le nom du paquet soit javax. Donc si vous obtenez le fichier jar à partir du lien et l'ajoutez au projet, cela fonctionnera.

13voto

manuna Points 305

Il existe une implémentation "autonome" de JAI-imageio, sans dépendances à jai_core. Elle ne nécessite pas l'installation de JAI dans votre JDK et JRE, seulement une dépendance Maven.

Dans Maven, ajoutez son référentiel :

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

et la dépendance :

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

Voir son site pour plus de détails

PS Mise à jour après un commentaire utile (une autre dépendance de gitHub qui ne nécessite pas l'ajout de ce dépôt) :

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

1 votes

Il s'avère que le <repository> est peut-être dépassée, mais la La page README de GitHub contient la <dépendance> qui n'a pas besoin d'un repo supplémentaire.

12voto

Mike Cornell Points 2661

Vous allez devoir télécharger les jars et les installer dans votre dépôt maven local, ou votre serveur proxy de dépôt local (Nexus/Artifactory). Je pense que vous pouvez utiliser le maven-enforcer-plugin pour valider que les paramètres d'environnement sont présents.

El licence pour jai_imageio ne lui permet pas d'être distribué .

0 votes

Merci pour la réponse. J'avais peur de cela, mais je suppose que je dois créer mes propres POMs pour cela.

0 votes

Eh bien, les POMs pour les fichiers existent déjà. mirrors.ibiblio.org/pub/mirrors/maven2/com/sun/media/ Il a la dépendance requise de jai_core. L'inconvénient est qu'il a cette downloadURL dans la gestion de la distribution.

0 votes

C'est la bonne réponse si vous êtes concerné par le déploiement de votre projet sur Maven Central. MC ne permet pas de s'appuyer sur des dépôts tiers comme le proposent certaines des autres réponses ici.

2voto

GregNash Points 311

Cela a marché pour moi :

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

Il semble que gt-coverage dépende de jai_imageio, donc il a installé les jars appropriés pour moi. Je n'ai même pas eu à modifier mon code pour utiliser cet artefact.

Ainsi, votre code fonctionnera dans votre IDE. Cependant, si vous voulez un jar exécutable, vous devez utiliser le plugin Maven Shade. Son utilisation est décrite aquí y aquí . Notez les lignes supplémentaires dans le 2ème lien car elles sont nécessaires. Voici le code supplémentaire à mettre dans votre 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>

Je ne sais pas ce que sont toutes ces entrées manifestes supplémentaires, mais elles font que mon jar exécutable fait ce qu'il fait dans l'IDE.

1 votes

A moins que vous besoin de la bibliothèque geotools dans votre projet en l'ajoutant comme dépendance comme solution de contournement pour obtenir jai-codec semble être une mauvaise solution.

1voto

I-yorn-man Points 37

Essayez ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X